创建解析器规则

时间:2011-10-31 13:47:41

标签: parsing compiler-construction

我目前正在上大学的CSCI课程编译器。我必须为编译器编写一个解析器,我已经完成了添加减法乘法除法和赋值语句。我的问题是我们现在必须做小于等于(< =)和大于等于(> =)并且我不确定如何为它编写规则... 我在想像......

expr LESSTHAN expr                 { $1 <= $3 }

expr GREATERTHAN expr              { $1 >= $3 }

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您应该包含更准确的问题。以下是一些一般性建议。

关系运算规则的结构应与算术运算相同。在这两种情况下,您都有二元运算符区别在于一个返回一个数字,另一个返回一个布尔值。虽然1 + 1 >= 3通常是有效的语法,但1 >= 2 => 5等其他组合很可能无效。当然,也有例外。有些语言允许它作为多个操作的语法糖。其他人只是定义布尔值只是整数(01)。这取决于您(或您的任务)您希望语法的样子。

无论如何,您可能不只是想将这些规则附加到expr,而是创建一个新规则。这样就可以区分关系表达式和算术表达式。

expr : 
    expr PLUS  expr | 
    expr MINUS expr | 
    ... ;

relational_expr : 
    expr LESSTHAN    expr |
    expr GREATERTHAN expr ;

assignment :
    identifier '=' relational_expr |
    identifier '=' expr            ;