2012-03-10 2 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つのreduce/reduce競合を受けていますが、それを見つける方法はわかりません。どんな助けもありがとう。

+0

"ルート" と "nonterminal_nodeを" まったく同じです。 – wildplasser

答えて

1

これは、XML文法に少し奇妙に見えます。空の番号をnode_listまたはattribute_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