如果定义解析器:
@start = int;
int = /[+-]?[0-9]+/
不幸的是,它不会解析任何以“+”为前缀的整数,除非您包括:
@numberState = "+" // at the top.
在上面的数字解析中,甚至没有提到“符号”默认解析器,但它仍然处于活动状态并覆盖用户定义的解析器。
好的,对于数字,您仍然可以通过添加指令来修复它。如果您尝试为“++”创建解析器怎么办?我还没有找到任何可以使以下解析器工作的指令。
@start = plusplus;
plusplus = "++";
默认解析器对用户解析器的影响似乎如此随意。为什么我不能解析“++”?
是否可以完全关闭默认解析器?如果我不做一些常见的事情,他们似乎会妨碍我。
或者也许我错了。
编辑:
我找到了一个可以解析 plus plus 的解析器:
@start = plusplus;
plusplus = plus plus;
plus = "+";
我猜答案是:解析器中定义的文字符号不能在默认解析器之间重叠;它必须至少被其中一次完全收容。