我目前正在上大学的CSCI课程编译器。我必须为编译器编写一个解析器,我已经完成了添加减法乘法除法和赋值语句。我的问题是我们现在必须做小于等于(< =)和大于等于(> =)并且我不确定如何为它编写规则... 我在想像......
expr LESSTHAN expr { $1 <= $3 }
expr GREATERTHAN expr { $1 >= $3 }
有什么建议吗?
答案 0 :(得分:0)
您应该包含更准确的问题。以下是一些一般性建议。
关系运算规则的结构应与算术运算相同。在这两种情况下,您都有二元运算符区别在于一个返回一个数字,另一个返回一个布尔值。虽然1 + 1 >= 3
通常是有效的语法,但1 >= 2 => 5
等其他组合很可能无效。当然,也有例外。有些语言允许它作为多个操作的语法糖。其他人只是定义布尔值只是整数(0
和1
)。这取决于您(或您的任务)您希望语法的样子。
无论如何,您可能不只是想将这些规则附加到expr
,而是创建一个新规则。这样就可以区分关系表达式和算术表达式。
expr :
expr PLUS expr |
expr MINUS expr |
... ;
relational_expr :
expr LESSTHAN expr |
expr GREATERTHAN expr ;
assignment :
identifier '=' relational_expr |
identifier '=' expr ;