Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何调试无效的ParseKit语法?_Objective C_Grammar_Parsekit - Fatal编程技术网

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

Objective c 如何调试无效的ParseKit语法?,objective-c,grammar,parsekit,Objective C,Grammar,Parsekit,我正在尝试为ParseKit编写语法,以便它与iphone应用程序中的基本命题逻辑语句相匹配。谁能告诉我哪里出了问题 @start = wff; wff = disjunction (implies disjunction)?; disjunction = conjuction (or conjuction)*; conjunction = notExpression (and notExpression)*; notExpression = (not | not primaryExpressi

我正在尝试为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的语法分析器的错误消息不是最大的。理想情况下,您会收到一条很好的错误消息,引导您解决问题(但是,它是开源的,所以欢迎任何人提供这种性质的修复)

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

  • 将ParseKit工作副本更新到主干的头部
  • 在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)*;
    
    ^
    (插入符号)的位置,您可以在看到第一个
    连接后立即判断解析器是否阻塞

    此表达式仅位于语法中的一行:

    disjunction = conjuction (or conjuction)*;
    
    这就是我注意到这行有一个拼写错误的原因


    这种方法总是会导致你的语法出现问题。希望能有所帮助。

    谢谢你的帮助。我无法让调试应用程序运行,因为我似乎无法让代码在netbeans中运行。一般来说,我对objective-c和xcode还是很陌生的。我设法使parsekit框架工作的唯一方法是使用cocoapod。