问题标签 [bisonc++]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-construction - 语义陈述和yacc
我正在搜索 c 语法并找到此链接https://www.lysator.liu.se/c/ANSI-C-grammar-y.html#cast-expression问题是存在 c 和 lex 代码的语法,但我没有看到任何语义,如加法,乘法实现我知道 yacc 仅用于语法检查,但我们也可以在其中编写语义,如果它们在其他工具中实现,语义在哪里实现。
我正在尝试实现一个小型编译器,我在哪里编写语义,使用函数在 yacc 中编写它们是否很好。
c - 我的预期结果在野牛中不起作用
该代码用于学习野牛和 flex,我是新手,但我想学习处理它们。
我正在尝试运行此代码,但我不知道错误在哪里,因为编译器说没问题,但我不知道为什么在我用数字 +573002597643 进行测试时会出现错误。这是一个有效的数字,因为我尝试遵守我的规则。
我的代码:
野牛:
弹性文件
parsing - 优先级问题
我正在尝试为相对简单的语法生成解析器,但我无法让我的优先级正常工作。
我已经设法减少了 15 个移位/减少错误,但我不知道如何解决剩下的几个错误——它们可能与我的优先级问题有关。
我有一个这样定义的语法:
尝试解析以下内容时,我没有得到我想要的值:
最后,我的解析器输出的相关部分是:
我能理解的最好的是,这个问题可能是由隐含的和(规则 3 和 4)引起的。如果这是问题的根源,我该如何解决?
谢谢!
parsing - 解析 decaf 的问题(变量声明与构造函数)
我正在使用野牛(3.0.4)和词法分析器来实现 Decaf 编程语言的(部分)语法。我只是在实现类内的内容。
因此,我的任务很简单:将每个生产规则(作为字符串)存储在树中,然后将其打印出来。
例如,如果您将以下代码行作为输入
class Foo { Foo(int arg1) { some2 a; } }
你(必须)得到以下输出
第一个问题(已解决)是它解析了变量声明而不是构造函数声明,尽管我在类本身的范围内没有变量声明(即我只有在构造函数的块内)。这解决了。
不过,如果我给出以下内容class abc { some1 abc; john doe; }
,它会说syntax error, unexpected SEMICOLON, expecting LP
. 因此,第 19 行的字符导致了问题。
这是.y文件(仅classBody规则)
这是完整.y文件的要点。
parsing - 无法解决以下 reduce-reduce 错误(LALR 解析)
我目前正在实现 Decaf(编程语言)语法的一部分。这是野牛代码的相关片段:
然而,一旦我开始研究名称生成规则,我的解析器就会发出reduce-reduce警告。
这是.output文件中的内容(由野牛生成):
所以,如果我们给出以下输入{ abc[1] = abc; }
,它会说syntax error, unexpected NUMBER, expected RS
。NUMBER来自表达式规则(基本上,它必须如何解析它),尽管它尝试通过local_var_decl规则解析它。
你认为应该改变什么来解决这个问题?花了大约 2 个小时,尝试了不同的东西,没有奏效。
谢谢!!
PS。这是完整.y源代码的链接
compiler-construction - 野牛中间规则动作不起作用
这是我的parser.y
和lex.l
当我用.c
文件运行这些时,输出如下:
我的预期输出是:
为什么会这样?
c++ - 如何使用带有 %type 指令的 std::variant 类型
我正在尝试在 Bison 中编写一些解析 C 代码的语法。我是野牛新手,我正在尝试从网上找到的示例中学习。我正在编写 AST。如果这是我定义的语法(最基本的用例)
现在,当我编译此代码时,会抛出一条错误消息,指出“声明符”没有类型。
我知道我可以使用 %type 声明性来定义类型。但我希望“声明符”与变体类型相关联:
我也无法编译此代码。它抛出 decl_type 未知的错误。我错过了什么?
bison - 如何获得标记的野牛语法规则
假设我有以下规则:
在这里,输出将如下:
因为rule2
会先减。有什么方法可以让我一拿到就打印出来TOKEN
吗?
注意我知道当它与令牌匹配时我可以从扫描仪中做到这一点,但我需要从野牛打印它。
regex - 当我有更好的规则时,为什么我的 lex 文件中的最后一条规则匹配?
我有一个lex
文件,里面有我的规则,例如:
并且当我尝试使用完全编译的(带有yacc
文件等)版本时,即使测试文件正确,也仅在测试文件上使用最后一条规则。
例如,这是这些规则的测试文件:
对于这个文件,我只得到:1: ERROR
.
为什么会这样,我该如何解决?
c++ - flex 和 bison 的无效字符错误
我的问题:
下面的代码出现无效字符错误。
在这里,我只想在未定义parse-param
宏TDM_PIN_MAP_TEST
的情况下定义,但出现以下错误。
行号28
是指我上面指出的代码。
感谢任何解决上述错误的指针。