0
私はフレックス/バイソンのレクサー/パーサーで扱いにくい問題を扱っています。ここで Flex/Bison:あいまいなトークンをレキシングする
はローマ数字と任意の識別子のために、いくつかのフレックスルールです:今"I"|"II"|"III"|"IV"|"V"|"VI"|"VII"|"i"|"ii"|"iii"|"iv"|"v"|"vi"|"vii" { return NUMERAL; }
"foobar" { return FOOBAR; }
[A-Za-z0-9_]+ { return IDENTIFIER; }
、この単純な文法を検討:
IVfoobar
:最後に
%token <numeral> NUMERAL
%token <foobar> FOOBAR
%token <identifier> IDENTIFIER
program
: numeral foobar { }
;
を、ここでは例として入力されます
私はこれを数字IVとしてレックスするつもりで、フーバーが続きます。しかし、これを識別子 "Vfoobar"の後に付いた数字、または識別子 "IVfoobar"だけでなく、どちらも無効であるとしてレキシングするのを防ぐにはどうすればいいですか?
なぜ 'IVfoobar'は無効な識別子ですか?あるいは、別の言い方をすれば、正確に有効な識別子は何ですか? – rici
@riciそれには解析ルールはないため、解析エラーが発生します。 – dylhunn
さて、はい。しかし、レクサーはそれを知ることができません。それは、それが間違って使用される有効な識別子になります。 – rici