懲りずにJavacc
しょうがないので、
Exception in thread "main" java.lang.Error: ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.
でググろう。
ここを見て、原因判明?。良くわかってないのだが、2章の例題と同じフォルダーで作業したのがいけないようだ。必要なファイルだけコピーして、もう一度、Javacc Javacを実行する。
ちょっと結果が変わった。
### Encountered "3" at line 1, column 1.
Was expecting one of:
<EOF>
"-" ...
"(" ...
< LITERAL> ...
System.out.print("in PrmExpr()");とかprintfデバッグで試行錯誤する。
わかった。TOKENの宣言順って、そのまま判定の優先順位なんだ。
TOKEN :
{
< LITERAL: (["0"-"9"])+ >
}
TOKEN :
{
< ANYOTHER: ~[] >
}
この < LITERAL>と < ANYOTHER>の順序が逆だ。3+5とかでは、まず3の < LITERAL>を解析しに行くのに、その前に < ANYOTHER>にぶつかっていた気がする。順序を変えてとりあえず動いた!
なーるほど。
The comments to this entry are closed.


Comments