基本的に次のような文法があります。
start ::= groups.
groups ::= groups group.
groups ::= group.
group(A) ::= IDENTIFIER identparams CURLY_OPEN assignments CURLY_CLOSE SEMICOLON.
group(A) ::= IDENTIFIER CURLY_OPEN assignments CURLY_CLOSE SEMICOLON.
assignments ::= assignments assignment.
assignment ::= IDENTIFIER ASSIGNMENT bool_expr SEMICOLON.
次のように解析します。
name {
name = "value";
name2 = "value";
};
それは確かに設定のような名前です。何が起こるかというと:
name = "value" は割り当て ::= 割り当てになります。減少しています。割り当ては定数値であると予想されますが、そうではありません。
P assignment(0x807e778) ::= IDENTIFIER(0x807e728) ASSIGNMENT mvalue SEMICOLON.
P assignments((nil)) ::= assignments((nil)) assignment(0x807e778).
P append 0x807e778 to 0x807e838
P mvalue ::= string.
P assignment(0x807e750) ::= IDENTIFIER(0x807e7c8) ASSIGNMENT mvalue SEMICOLON.
P assignments((nil)) ::= assignments(0x807e838) assignment(0x807e750).
P append 0x807e750 to 0x807e910
P mvalue ::= string.
P assignment(0x807e7f0) ::= IDENTIFIER(0x807e7a0) ASSIGNMENT mvalue SEMICOLON.
P assignments((nil)) ::= assignments(0x807e910) assignment(0x807e7f0).
P append 0x807e7f0 to 0x807e9e8
P group(0x807e7a0) assignments(0x807e9e8) : bind
P groups ::= group(0x807e7a0).
レモンのデバッグ出力はhttp://pastebin.com/yHNkNRpfです
その結果、name2 のみがリストに追加されます。私はこれに困惑しています。reduce は理解していますが、代入者が null に設定され続ける理由はわかりません。これを回避する方法はありますが、私は適切な修正を好みます。
レモンのデバッグ出力はhttp://pastebin.com/yHNkNRpfです
手がかりはありますか?