数値が 0^n 1^n の形式であるかどうかを確認する Yacc プログラムがあります。
%start S
%%
S:'0' S '1' {printf("Success\n");}|;
%%
(すべてのトークンは lex ファイルで定義されます)
私が得る出力は次のとおりです
0011
Success
Success
syntax error
1100
syntax error
Success が 2 回出力される理由は理解できますが、最初の出力で構文エラーが発生しているのは何ですか?
bison
さらに、 LALR(1) パーサー ジェネレーターはこのタスクをどのように行うのでしょうか?