我已经花了两个多的时间来转换它,但我总是得到通用的前缀ID。
有人能给我解释一下吗?因为我正在尝试做一个非常大的语法,并需要我的基础清楚。
A、B、C、D是唯一的非终端。
A : ‘(‘ B ‘)’
| ID ASSIGN C
| C
C : C '+' D
| C '-' D
| D
D : ID
| ID '(' actuals ')'
| ID '(' ')'
| INT_LIT
| ‘(‘ C ‘)’
B : B ';' A | A发布于 2014-03-11 09:03:43
在LL中,一个产品不能有多个以同一个终端开始的选项,所以如果你愿意的话,你可以把这些公共部分放到一个共享头中。所以
D : ID
| ID '(' actuals ')'
| ID '(' ')'
| INT_LIT
| ‘(‘ C ‘)’ 变成了类似于
D : D_things_that_start_with_ID
| D_things_that_do_not_start_with_ID哪里
D_things_that_start_with_ID :
ID D_things_that_follow_ID
D_things_that_follow_ID :
epsilon
| '(' actuals ')'
| '(' ')'
D_things_that_do_not_start_with_ID :
INT_LIT
| ‘(‘ C ‘)’ 对于其他常见导联符号,依此类推。
https://stackoverflow.com/questions/22314394
复制相似问题