私は2つの式を持っています:
ident = alpha . (alnum|[._\-])*;
string = (printable1)+;
# Printable includes almost all Windows-1252 characters with glyphs.
main := ( ident % do_ident | string % do_string )
# The do_* actions have been defined, and generate tokens.
明らかに、任意の ident は文字列です。Ragel には、これを克服するための優先オペレーターがいます。しかし、どのように優先度を設定しようとしても、一部の ident が両方のアクションを実行するか、一部の有効な文字列が無視されます (有効な ident を接頭辞として持つ有効な文字列、たとえば ab$)。
優先順位を使用せずに、それを回避する1つの方法を見つけました:
main := ( ident % do_ident | (string - ident) % do_string )
しかし、重複する式がいくつかある場合、これは面倒になります。これが唯一の実用的な方法ですか?
これを行う正しい方法についての助けをいただければ幸いです。