小编Par*_*eod的帖子

你如何解析悬挂的其他东西?

我正在为C语言编写一个编译器,我还有一个问题要解决:如何处理悬空的其他问题.原始规则如下:

A - > if(表达式)语句| if(表达式)语句else语句

摆脱左递归后:

A - > if(表达式)语句B.

B - >其他声明| EMPTY

问题是"else"在第一组和后两组中.我认为这对于这样的例子是有意义的:

if(x>y)
     if(x == 10)
          printf("x is 10.\n");
else
     printf("x<y");
Run Code Online (Sandbox Code Playgroud)

第一个if后跟一个else,第二个if后跟相同的else,因此规则的应用方式存在歧义.我知道我需要将else配对最近的,打开if,但我不确定如何转换为解析器的代码.当我达到规则A时,我会打电话给B,但那么呢?如果我将"else"视为下一个标记,我是否使用B - > else语句或B - > EMPTY?

c compiler-construction parsing

3
推荐指数
1
解决办法
408
查看次数

标签 统计

c ×1

compiler-construction ×1

parsing ×1