我已经浪费了两倍的时间来转换它,但我总是起床得到共同的前缀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
答案 0 :(得分:1)
在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 ‘)’
以及其他常见的引导符号。