簡體   English   中英

我的語法中哪里有歧義?

[英]Where is the ambiguity in my grammar?

我有以下模棱兩可的語法,其中大寫字母規則用於簡單的詞匯標記:

program : function | function program
function : FN ID ARROW TYPE invariants DASH block
fn_call : ID L_PAREN CONSTANT R_PAREN


invariants : invariant | invariant invariants
invariant : TYPE ID COLON invariant_tests
invariant_tests : test | test COMMA invariant_tests
test : OPERATOR CONSTANT | STAR


block : expression | expression block
expression : loop | fn_call | assignment | def | constant
loop : FOR def IN CONSTANT COLON block
assignment : ID ASSIGN CONSTANT | ID ASSIGN ID
def : TYPE assignment

我收到8個shift / reduce錯誤(使用Python 2.7和PLY時)。

歧義是我如何定義“一個或多個”的結果。 block : expression | expression block block : expression | expression block

問題是我如何定義loop

loop : FOR def IN CONSTANT COLON block

因為解析器不了解該塊是屬於循環還是屬於函數。

基本上,是懸而未決問題的另一個變體。

正如先前的發言者所說,您必須區分“塊用法”。 例如,嘗試:

loop : FOR def IN CONSTANT COLON block END FOR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM