gpt4 book ai didi

objective-c - 如何调试无效的 ParseKit 语法?

转载 作者:行者123 更新时间:2023-12-04 05:21:35 24 4
gpt4 key购买 nike

我正在尝试为 ParseKit 编写语法,以便它与 iphone 应用程序中的基本命题逻辑句子相匹配。有人可以告诉我我哪里出错了。

@start = wff;
wff = disjunction (implies disjunction)?;
disjunction = conjuction (or conjuction)*;
conjunction = notExpression (and notExpression)*;
notExpression = (not | not primaryExpression);
primaryExpression = variable | lbracket wff rbracket;
variable = p | q | r;

p = 'P';
q = 'Q';
r = 'R';

implies = '→';
and = '∧';
or = '∨';
not = '¬';
lbracket = '(';
rbracket = ')';

另外我将如何添加一些额外的回调,以便我可以从语法创建解析树。

最佳答案

ParseKit 开发商这里。

我看到一个明显的问题:conjunction在你的语法中有几个地方拼错了。

ParseKit 的语法解析器的错误消息并不是最大的。理想情况下,您会收到一条很好的错误消息,引导您解决问题(但是,嘿,它是开源的,因此欢迎任何人提供这种性质的修复)。

但是,我可以告诉您我是如何发现这些问题的:

  • 将您的 ParseKit 工作副本更新为 google code 的头部后备箱。
  • 在Xcode中,开启断点并为所有异常添加断点
  • 将您的 ParseKit 语法放在此文件中:~/Desktop/grammar.txt
  • (可选)在此文件中放置任何示例输入:~/Desktop/input.txt
  • 运行 ParseKit DebugApp调试配置中的目标。
  • 点击大Run应用程序运行时出现的窗口中的按钮。
  • 等待抛出异常。断点被击中。

  • 如果您的语法中有错误,您会发现异常很可能发生在 ParseKit 汇编器回调中,例如:
    - (void)parser:(PKParser *)p didMatchExpression:(PKAssembly *)a

    打印 a到调试控制台。你会看到类似的东西:
    (lldb) po a
    (PKAssembly *) $1 = 0x00000001075a9010 [] /conjuction/ ^(/or/ /conjuction/)/*

    这是 PKAssembly 的打印输出对象传递到您的回调中。在这里您可以看到 ParseKit 的语法解析器未能解析您的语法的地方。 ParseKit 语法解析器在解析这个表达式时似乎失败了:
    conjuction (or conjuction)*;

    而从 ^的位置(插入符号),您可以告诉解析器在看到第一个 conjuction 后立即窒息.

    此表达式仅位于语法中的一行中:
    disjunction = conjuction (or conjuction)*;

    这就是我注意到这一行中有一个拼写错误的方式。

    这种方法总是会引导您找到语法中的问题行。希望有帮助。

    关于objective-c - 如何调试无效的 ParseKit 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637577/

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