程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了有问题的 Bison 语法不接受呼叫的呼叫或呼叫后的任何内容,除了 ;大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决有问题的 Bison 语法不接受呼叫的呼叫或呼叫后的任何内容,除了 ;?

开发过程中遇到有问题的 Bison 语法不接受呼叫的呼叫或呼叫后的任何内容,除了 ;的问题如何解决?下面主要结合日常开发的经验,给出你关于有问题的 Bison 语法不接受呼叫的呼叫或呼叫后的任何内容,除了 ;的解决方法建议,希望对你解决有问题的 Bison 语法不接受呼叫的呼叫或呼叫后的任何内容,除了 ;有所启发或帮助;

我在 Bison 中有一些语法:https://pastebin.com/raw/dA2bypFR。 它相当长,但不是很复杂。

问题是,在调用之后,它不会接受除 ; 以外的任何内容,例如 a(b)(C) 并且无效,a(b).c 无效,它们都只接受后面的分号右括号。 a(b)+c 不过还好

我尝试将 call_or_getattr 分成 2 个,其中 . 的优先级高于 (,但这意味着 a().b 是无效语法。

我还尝试将 callgetattr 放入 basic_operand 的定义中,但这导致了 536 个移位/减少错误。

解决方法

你最后的作品如下(没有动作,这是无关紧要的干扰):

call_or_getattr:
    basic_operand
|   basic_operand '(' csv ')'
|   basic_operand '.' T_ID

所以这些是后缀运算符,其参数必须是 basic_operand。在 a(b)(C) 中,(C) 参数列表没有应用于 basic_operand,因此语法不会匹配它。

我想你要找的是:

call_or_getattr:
    basic_operand
|   call_or_getattr '(' csv ')'
|   call_or_getattr '.' T_ID

便说一下,这与您为二元运算符编写产生式的方式非常相似。 (当然,二元运算符有一个右手操作数。)

大佬总结

以上是大佬教程为你收集整理的有问题的 Bison 语法不接受呼叫的呼叫或呼叫后的任何内容,除了 ;全部内容,希望文章能够帮你解决有问题的 Bison 语法不接受呼叫的呼叫或呼叫后的任何内容,除了 ;所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:;除了