私はCFGのセットのパーサーを書いています。(注:RHSは大文字のみにすることができます)
/*宣言などを無視します。これがコードの主要部分です*/
void
start():
{
}
{
(
<UPPER_CHAR>
<ARROW>
<STRING>
( <PIPE> <STRING> )*
)*
}
TOKEN:
{
<ARROW: "=>" >
|
<PIPE: "|">
|
<UPPER_CHAR: (["A"-"Z"])>
}
TOKEN: {<STRING: (<LETTER> | <DIGIT> | <SYMBOL>)+ > }
これは明らかにいくつかのエッジケースを見逃しました。
A => A | a | D E => e
それで、私は何を間違えましたか?