2012-03-10 173 views
1

我有以下語法用於檢查XML文件的有效性,該文件從元素開始,然後是根節點。YACC語法減少/減少衝突

program 
    : terminal_node 
     root 
    ; 
root 
    : '<' ID attribute_list '>' node_list '<' ID '/''>' 
    ; 
node_list 
    : node 
    | node node_list 
    ; 
node 
    : terminal_node 
    : nonterminal_node 
    ; 

terminal_node 
    : '<' ID attribute_list '/''>' 
    ; 

nonterminal_node 
    : '<' ID attribute_list '>' node_list '<' ID '/''>' 
    ; 
attribute_list 
    : attribute 
    | attribute attribute_list 
    ; 

attribute 
    : ID ASSIGNOP '"' ID '"' 
    | ID ASSIGNOP '"' NUM '"' 
    ; 

我得到1減少/減少衝突,我不知道如何找到它。任何幫助,將不勝感激。

+0

「根」 和 「nonterminal_node」 是完全一樣的。 – wildplasser 2012-03-10 20:12:27

回答

1

這對XML語法看起來有點奇怪。你確定你不想要空的node_listattribute_list嗎?

不管怎樣,試試這個:

node_list 
    : node 
    | node_list node /* list first, element second, this is the LALR way */ 
    ; 
node 
    : terminal_node 
    | nonterminal_node /* note a typo in your code here */ 
    ; 
+0

這是一個拳頭的版本,以確保它的工作,是的,我想出了它應該是'node_list節點'謝謝你的答案。 – mihajlv 2012-03-10 20:22:21