3

私はそれを変換するのにすでに 2 つの時間を無駄にしましたが、私はいつも共通のプレフィックス 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 に答える