【问题标题】:When ParseKit tries to recognize my Grammar, it enters an infinite loop. What's wrong?当 ParseKit 尝试识别我的语法时,它会进入无限循环。怎么了?
【发布时间】:2012-12-13 18:31:52
【问题描述】:

您好,我正在为一些使用递归的公式创建语法。这个公式要复杂得多,但现在我只测试它的一部分。调用 parse 方法后,它会在 allMatchesFor 方法上崩溃。堆栈跟踪充满了 allMatchesFor 调用,因此看起来它处于无限循环中 哪里有问题。是在我的语法构造逻辑中还是在其他方面?我怎样才能完成类似的事情以避免这种崩溃

我的语法是这样的:  

@start = formula;
formula = valueTypeResult;
valueTypeResult = (value | concept | arithmeticStatement);
arithmeticStatement = valueTypeResult (arithmeticOperator valueTypeResult)+;
value = 'V';
concept = 'C';
arithmeticOperator = 'A';

你能告诉我如何创建使用递归的语法吗?

谢谢

【问题讨论】:

    标签: objective-c parsekit


    【解决方案1】:

    ParseKit 的开发者在这里。

    ParseKit 的递归没有问题,但是你的语法不正确。这更像是一个 BNF 语法问题而不是 ParseKit 问题。

    这是我认为您正在尝试使用上述语法的正确版本:

    @start = formula;
    formula = arithmeticStatement;
    arithmeticStatement = valueTypeResult (arithmeticOperator valueTypeResult)+;
    valueTypeResult = (value | concept);
    value = 'V';
    concept = 'C';
    arithmeticOperator = 'A';
    

    【讨论】:

    • 不幸的是它对我不起作用。我给字符串“VAC”解析,它应该解析没有错误。一个值(V),后跟算术运算符(A),最后是概念(C)。
    • 您必须在字符之间放置(某种形式的)空格。如果您使用 ParseKit grammars,则输入字符串会被标记化。 VAC 是单个 Word 令牌。 不是 3 个单独的字符。我建议阅读 ParseKit 标记化文档 (parsekit.com/tokenization.html)。我对这个问题的回答:stackoverflow.com/questions/13792980/…
    • 感谢您的提示。我还想问你一件事。我可以将 parsekit 设置为不从字符串的开头看,而是尝试匹配整个字符串,比如 regexp 中的贪婪模式?
    • 如果您想感谢我,请将我的回答标记为正确。 :)
    • 谢谢托德。我将您的答案标记为正确。你能在我上一条评论中回复这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多