我有 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$)。
我找到了一种解决方法,不使用优先级:
main := ( ident % do_ident | (string - ident) % do_string )
但是如果我有多个重叠的表达式,这将变得很麻烦。这是唯一实用的方法吗?
任何有关正确方法的帮助将不胜感激。