diff options
author | ymherklotz <ymherklotz@gmail.com> | 2017-03-10 18:53:29 +0000 |
---|---|---|
committer | ymherklotz <ymherklotz@gmail.com> | 2017-03-10 18:53:29 +0000 |
commit | fc4486443f1af75526306377437cb82c2c9f37ac (patch) | |
tree | d1058fc594c49b7cb4064f34855464d9fc3ecb89 | |
parent | 7a61349a09b4db96794a2a90d2d488f020885442 (diff) | |
download | Compiler-fc4486443f1af75526306377437cb82c2c9f37ac.tar.gz Compiler-fc4486443f1af75526306377437cb82c2c9f37ac.zip |
Passing all my tests for now
-rw-r--r-- | c_compiler/GRTAGS | bin | 98304 -> 98304 bytes | |||
-rw-r--r-- | c_compiler/GTAGS | bin | 57344 -> 57344 bytes | |||
-rw-r--r-- | c_compiler/include/expression.hpp | 12 | ||||
-rw-r--r-- | c_compiler/src/c_parser.y | 2 | ||||
-rw-r--r-- | c_compiler/src/expression.cpp | 20 |
5 files changed, 33 insertions, 1 deletions
diff --git a/c_compiler/GRTAGS b/c_compiler/GRTAGS Binary files differindex 4a1db03..f6e85c0 100644 --- a/c_compiler/GRTAGS +++ b/c_compiler/GRTAGS diff --git a/c_compiler/GTAGS b/c_compiler/GTAGS Binary files differindex b730179..e0846e7 100644 --- a/c_compiler/GTAGS +++ b/c_compiler/GTAGS diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp index d77d9d5..2476de1 100644 --- a/c_compiler/include/expression.hpp +++ b/c_compiler/include/expression.hpp @@ -39,6 +39,18 @@ public: }; +class AdditiveExpression : public OperationExpression +{ +private: + std::string operand; + +public: + AdditiveExpression(Expression* _lhs, const std::string& _operand, Expression* _rhs); + + virtual VariableStackBindings printasm(VariableStackBindings bindings) const; +}; + + class Identifier : public Expression { private: diff --git a/c_compiler/src/c_parser.y b/c_compiler/src/c_parser.y index c762151..dd609ee 100644 --- a/c_compiler/src/c_parser.y +++ b/c_compiler/src/c_parser.y @@ -278,7 +278,7 @@ ShiftExpression: AdditiveExpression: MultiplicativeExpression { $$ = $1; } - | AdditiveExpression T_ADDSUB_OP MultiplicativeExpression { $$ = $3; } +| AdditiveExpression T_ADDSUB_OP MultiplicativeExpression { $$ = new AdditiveExpression($1, *$2, $3); } ; MultiplicativeExpression: diff --git a/c_compiler/src/expression.cpp b/c_compiler/src/expression.cpp index 29bfe0d..8935e37 100644 --- a/c_compiler/src/expression.cpp +++ b/c_compiler/src/expression.cpp @@ -50,6 +50,26 @@ VariableStackBindings AssignmentExpression::printasm(VariableStackBindings bindi } +// Additive Expression definition + +AdditiveExpression::AdditiveExpression(Expression* _lhs, const std::string& _operand, Expression* _rhs) + : OperationExpression(_lhs, _rhs), operand(_operand) +{} + +VariableStackBindings AdditiveExpression::printasm(VariableStackBindings bindings) const +{ + rhs->printasm(bindings); + + std::cout << "\tmove\t$3,$2" << std::endl; + + lhs->printasm(bindings); + + std::cout << "\tadd\t$2,$2,$3" << std::endl; + + return bindings; +} + + // Identifier definition Identifier::Identifier(const std::string& id) |