我有一個簡單的LALR(1)語法,但遇到了問題。LALR(1)空函數參數列表
start ::= spec.
spec ::= MOD STRING top_stmt.
spec ::= top_stmt.
top_stmt ::= stmt.
top_stmt ::= conditional.
stmt ::= expr.
stmt ::= assignment.
conditional ::= IF stmt_list.
expr ::= retval.
expr ::= NOT retval.
retval ::= access.
retval ::= invoke.
access ::= ns_identifier OBJECT_OPERATOR property_chain.
access ::= ns_identifier.
ns_identifier ::= identifier.
ns_identifier ::= ns_identifier NS_SEPARATOR identifier.
ns_identifier ::=.
property_chain ::= property_chain OBJECT_OPERATOR identifier.
property_chain ::= identifier.
identifier ::= VARIABLE.
identifier ::= STRING.
assignment ::= access ASSIGN expr. [ASSIGN]
stmt_list ::= stmt.
stmt_list ::= stmt_list COMMA stmt. [COMMA]
invoke ::= access LPAREN empty_stmt_list RPAREN.
empty_stmt_list ::=.
empty_stmt_list ::= stmt.
empty_stmt_list ::= empty_stmt_list COMMA stmt. [COMMA]
圓點標誌着統治的結束,括號中的終端都分配有關聯:分配是右結合,逗號左副教授。
但是lemon表示它不能減少規則「empty_stmt_list :: =」。因爲它沒有連接到開始符號。我敢打賭它是:-)
還有一個「調用」的解析衝突,當empty_stmt_list確實是empy語句列表時,它無法在RPAREN和COMMA之間做出決定。
我想要實現的是能夠解析沒有(void)參數的函數調用。
其他一切按預期工作。
感謝
編輯:我已經編輯我原來的職位,並張貼整個剝離下來的語法。
您的符號是不是完全傳統的 - 它是ANTLR啓發的嗎?什麼是括號'(A)'和'(B)'的東西?在記譜法中單獨的'。'的意義是什麼?它似乎是一個元字符,規則和後面的行動 – 2010-01-16 17:23:41