2011-10-31 119 views
0

我目前在CSCI类,编译器在我的大学。我必须为编译器编写一个解析器,并且我已经完成了添加减法乘法除法和赋值语句。我的问题是我们现在必须做的不到相等的(< =)和大于等于(> =),我不知道如何写它的规则... 我在想像的东西像...创建解析器规则

expr LESSTHAN expr     { $1 <= $3 } 

expr GREATERTHAN expr    { $1 >= $3 } 

有什么建议吗?

+2

我刚添加了作业标签。请将它用于作业问题。请注意,提问者的负担通常高于作业问题。您可能想要提供更多内容来说明您在问题中已经完成的工作。具体来说,你为什么在这个操作符上遇到问题,而不是乘法运算符?是什么让你不同?它的优先级低于加法(一般),所以结构关系应该遵循模式增加是多重的,因为更重要的是增加。 – ccoakley

+3

这个问题缺乏所有的上下文。什么解析器生成器?你现有的语法定义是什么?这种语言不可知论?请根据情况标签 – sehe

回答

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   ;