Add comparison operators

Signed-off-by: CHatingPython <chatingpython@gmail.com>
This commit is contained in:
CHatingPython
2026-05-30 13:09:39 +02:00
committed by CHatingPython
parent f4efb53531
commit 737f637a38
6 changed files with 46 additions and 2 deletions
+7 -1
View File
@@ -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 {
+6
View File
@@ -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;
+6
View File
@@ -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
View File
@@ -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;