3

我已经在转换它上浪费了很多时间,但我总是起床获得通用前缀 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
4

1 回答 1

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 ‘)’ 

等等其他常见的铅符号。

于 2014-03-11T01:03:42.710 回答