gpt4 book ai didi

objective-c - 算术解析器

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:57 25 4
gpt4 key购买 nike

我正在 TDArithmeticParser.m 之上构建一个解析器ParseKit 测试。我扩展了 TDArithmeticParserTest.m 失败测试:

- (void)testMath {
s = @"10+(2*3)-15";
result = [p parse:s];
TDEquals((double)1.0, result); // result == 0.0
}

问题是我不明白为什么语法不适用于此测试。算术解析器对应的BNF-grammar为:

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;

如果有任何想法可以帮助我找出问题,我将不胜感激。

最佳答案

ParseKit 的开发者|在这里。

首先,请注意:TDArithmeticParser 只是 ParseKit 测试包中包含的一些(不是非常健壮的)示例代码。它不是 ParseKit 本身的一部分。

看起来这是 TDArithmeticParser 类中的错误/缺陷,其中 -15 被识别为 negative fifteent,而不是 subtract十五.

如果你添加空格,这个问题就解决了:

s = @"10+(2*3)- 15";

相反的行为也可能通过一个小的改变,但是独立的 -15 将不会被识别为有效输入(这对你来说可能是也可能不是问题)。

通过对语法和汇编器回调进行一些更改,可以同时支持两者。

关于objective-c - 算术解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19935670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com