Add comparison operators
Signed-off-by: CHatingPython <chatingpython@gmail.com>
This commit is contained in:
+7
-1
@@ -82,6 +82,12 @@ std::ostream& operator<<(std::ostream& os, binop_expression_node_t type) {
|
||||
case binop_expression_node_t::Mul: return os << '*';
|
||||
case binop_expression_node_t::Div: return os << '/';
|
||||
case binop_expression_node_t::Mod: return os << '%';
|
||||
case binop_expression_node_t::Equal: return os << "==";
|
||||
case binop_expression_node_t::NotEqual: return os << "!=";
|
||||
case binop_expression_node_t::LessThan: return os << '<';
|
||||
case binop_expression_node_t::GreaterThan: return os << '>';
|
||||
case binop_expression_node_t::LessEqual: return os << "<=";
|
||||
case binop_expression_node_t::GreaterEqual: return os << ">=";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +102,7 @@ bool binop_expression_node::equal(const node& rhsNode) const {
|
||||
}
|
||||
|
||||
std::ostream& var_assign_expression_node::print(std::ostream& os) const {
|
||||
return os << *m_lhs << " = " << *m_rhs;
|
||||
return os << '(' << *m_lhs << ' ' << m_compound << "= " << *m_rhs << ')';
|
||||
}
|
||||
|
||||
bool var_assign_expression_node::equal(const node& rhsNode) const {
|
||||
|
||||
@@ -127,6 +127,12 @@ token_handle<> lexer::next_token() {
|
||||
{ "*=", token_t::StarEq },
|
||||
{ "/=", token_t::SlashEq },
|
||||
{ "%=", token_t::PercentEq },
|
||||
{ "==", token_t::DEq },
|
||||
{ "!=", token_t::NotEq },
|
||||
{ "<", token_t::LessThan },
|
||||
{ ">", token_t::GreaterThan },
|
||||
{ "<=", token_t::LessEq },
|
||||
{ ">=", token_t::GreaterEq },
|
||||
};
|
||||
|
||||
token_t type = token_t::None;
|
||||
|
||||
@@ -271,6 +271,12 @@ ast::expression_node_h parser::parse_expression_rhs(ast::expression_node_h&& ini
|
||||
{ token_t::StarEq, rhsop_info::create(ast::binop_expression_node_t::Mul) },
|
||||
{ token_t::SlashEq, rhsop_info::create(ast::binop_expression_node_t::Div) },
|
||||
{ token_t::PercentEq, rhsop_info::create(ast::binop_expression_node_t::Mod) },
|
||||
{ token_t::DEq, rhsop_info::create(ast::binop_expression_node_t::Equal, 10, associativity::Left) },
|
||||
{ token_t::NotEq, rhsop_info::create(ast::binop_expression_node_t::NotEqual, 10, associativity::Left) },
|
||||
{ token_t::LessThan, rhsop_info::create(ast::binop_expression_node_t::LessThan, 9, associativity::Left) },
|
||||
{ token_t::GreaterThan, rhsop_info::create(ast::binop_expression_node_t::GreaterThan, 9, associativity::Left) },
|
||||
{ token_t::LessEq, rhsop_info::create(ast::binop_expression_node_t::LessEqual, 9, associativity::Left) },
|
||||
{ token_t::GreaterEq, rhsop_info::create(ast::binop_expression_node_t::GreaterEqual, 9, associativity::Left) },
|
||||
};
|
||||
|
||||
ast::expression_node_h lhs = std::move(init);
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(void) {
|
||||
furc::front::parser parser("<TEMP>", "func main() {\n return (x - -y) * z++;\n}");
|
||||
furc::front::parser parser("<TEMP>", "func main() {\n return x = y;\n}");
|
||||
std::cout << parser.parse() << '\n';
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user