我正在ParseKit测试的TDArithmeticParser.m之上构建一个解析器。我使用failing
测试扩展了TDArithmeticParserTest.m:
- (void)testMath {
s = @"10+(2*3)-15";
result = [p parse:s];
TDEquals((double)1.0, result); // result == 0.0
}
问题在于我不明白为什么语法不能用于此测试。算术解析器的相应BNF语法是:
expr = term (plusTerm | minusTerm)*;
term = factor (timesFactor | divFactor)*;
plusTerm = '+' term;
minusTerm = '-' term;
factor = phrase exponentFactor | phrase;
timesFactor = '*' factor;
divFactor = '/' factor;
exponentFactor = '^' factor;
phrase = '(' expr ')' | Number;
我会非常感谢有助于我发现问题的任何想法。
答案 0 :(得分:3)
ParseKit的开发人员。
首先,请注意:TDArithmeticParser
只是ParseKit测试包中包含的一些(非常非常强大)示例代码。它不是ParseKit本身的一部分。
这似乎是TDArithmeticParser
类中的错误/缺陷,其中-15
被识别为负十五,而不是减去十五。< / p>
如果添加空格,则解决此问题:
s = @"10+(2*3)- 15";
相反的行为也可以通过一个小的改变,但是单独的-15
不会被识别为有效的输入(这可能是也可能不是你的问题)。
对于语法和汇编程序回调的一些更改,可以同时支持两者。