[英]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.