来自Parsekit: how to match individual quote characters?
如果您定义解析器:
@start = int;
int = /[+-]?[0-9]+/
不幸的是,它不会解析前缀为“+”的任何整数,除非你包括:
@numberState = "+" // at the top.
在上面的数字解析中,甚至没有提到“符号”默认解析器,但它仍处于活动状态并覆盖用户定义的解析器。
好的,使用数字你仍然可以通过添加指令来修复它。如果您正在尝试为“++”创建解析器,该怎么办?我还没有找到任何可以使以下解析器工作的指令。
@start = plusplus;
plusplus = "++";
默认解析器对用户解析器的影响似乎是任意的。为什么我不能解析“++”?
是否可以完全关闭默认的Parsers?如果我不做一些常见的事情,他们似乎会阻碍他们。
或许我错了。
编辑:
我找到了一个解析加解析的解析器:
@start = plusplus;
plusplus = plus plus;
plus = "+";
我猜答案是:解析器中定义的文字符号不能在默认解析器之间重叠;它必须至少完全包含一次。
答案 0 :(得分:2)
ParseKit的开发人员。
我有一些回复。
我认为你会发现ParseKit API非常优雅和明智,你学的越多。请记住,我不是说我自己的号角。虽然我构建了ParseKit,但我没有设计ParseKit API。相反,ParseKit的设计几乎完全基于Steven Metsker's Building Parsers In Java中的设计。如果你想深入了解ParseKit,我强烈建议你查看这本书。另外,这是一本关于解析的精彩书籍。
您将标记符状态与分析程序混淆。它们是两个不同的东西,但细节比我在这里可以回答的更复杂。我再次推荐Metsker的书。
在回答你的问题的过程中,我确实在ParseKit中发现了一个小错误。谢谢!但是,它并没有影响您上面描述的结果,因为您没有使用正确的语法来获得您正在寻找的结果。您现在需要从Google Code Project更新源代码,否则我的建议将不适合您。
现在回答你的问题。
我认为您正在寻找一种语法,它既可以将++
识别为单个多字符Symbol
令牌,也可以将带有+
个字符的数字识别为显式正数而不是+
Symbol
令牌,后跟Number
令牌。
我相信你正在寻找的正确语法是这样的:
@symbols = '++'; // declare ++ as a multi-char symbol
@numberState = '+'; // allow explicitly-positive numbers
@start = (Number|Symbol)*;
像这样输入:
++ +1 -2 + 3 ++
将被如此标记:
[++, +1, -2, +, 3, ++]++/+1/-2/+/3/++^
两个提醒: