问题标签 [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.

0 投票
1 回答
394 浏览

compiler-construction - 语义陈述和yacc

我正在搜索 c 语法并找到此链接https://www.lysator.liu.se/c/ANSI-C-grammar-y.html#cast-expression问题是存在 c 和 lex 代码的语法,但我没有看到任何语义,如加法,乘法实现我知道 yacc 仅用于语法检查,但我们也可以在其中编写语义,如果它们在其他工具中实现,语义在哪里实现。

我正在尝试实现一个小型编译器,我在哪里编写语义,使用函数在 yacc 中编写它们是否很好。

0 投票
1 回答
38 浏览

c - 我的预期结果在野牛中不起作用

该代码用于学习野牛和 flex,我是新手,但我想学习处理它们。

我正在尝试运行此代码,但我不知道错误在哪里,因为编译器说没问题,但我不知道为什么在我用数字 +573002597643 进行测试时会出现错误。这是一个有效的数字,因为我尝试遵守我的规则。

我的代码:

野牛:

弹性文件

0 投票
1 回答
27 浏览

parsing - 优先级问题

我正在尝试为相对简单的语法生成解析器,但我无法让我的优先级正常工作。

我已经设法减少了 15 个移位/减少错误,但我不知道如何解决剩下的几个错误——它们可能与我的优先级问题有关。

我有一个这样定义的语法:

尝试解析以下内容时,我没有得到我想要的值:

最后,我的解析器输出的相关部分是:

我能理解的最好的是,这个问题可能是由隐含的和(规则 3 和 4)引起的。如果这是问题的根源,我该如何解决?

谢谢!

0 投票
1 回答
151 浏览

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文件的要点。

0 投票
1 回答
47 浏览

parsing - 无法解决以下 reduce-reduce 错误(LALR 解析)

我目前正在实现 Decaf(编程语言)语法的一部分。这是野牛代码的相关片段:

然而,一旦我开始研究名称生成规则,我的解析器就会发出reduce-reduce警告。

这是.output文件中的内容(由野牛生成):

所以,如果我们给出以下输入{ abc[1] = abc; },它会说syntax error, unexpected NUMBER, expected RSNUMBER来自表达式规则(基本上,它必须如何解析它),尽管它尝试通过local_var_decl规则解析它。

你认为应该改变什么来解决这个问题?花了大约 2 个小时,尝试了不同的东西,没有奏效。

谢谢!!

PS。这是完整.y源代码的链接

0 投票
1 回答
329 浏览

compiler-construction - 野牛中间规则动作不起作用

这是我的parser.y

lex.l

当我用.c文件运行这些时,输出如下:

我的预期输出是:

为什么会这样?

0 投票
1 回答
252 浏览

c++ - 如何使用带有 %type 指令的 std::variant 类型

我正在尝试在 Bison 中编写一些解析 C 代码的语法。我是野牛新手,我正在尝试从网上找到的示例中学习。我正在编写 AST。如果这是我定义的语法(最基本的用例)

现在,当我编译此代码时,会抛出一条错误消息,指出“声明符”没有类型。

我知道我可以使用 %type 声明性来定义类型。但我希望“声明符”与变体类型相关联:

我也无法编译此代码。它抛出 decl_type 未知的错误。我错过了什么?

0 投票
1 回答
73 浏览

bison - 如何获得标记的野牛语法规则

假设我有以下规则:

在这里,输出将如下:

因为rule2会先减。有什么方法可以让我一拿到就打印出来TOKEN吗?

注意我知道当它与令牌匹配时我可以从扫描仪中做到这一点,但我需要从野牛打印它。

0 投票
1 回答
179 浏览

regex - 当我有更好的规则时,为什么我的 lex 文件中的最后一条规则匹配?

我有一个lex文件,里面有我的规则,例如:

并且当我尝试使用完全编译的(带有yacc文件等)版本时,即使测试文件正确,也仅在测试文件上使用最后一条规则。

例如,这是这些规则的测试文件:

对于这个文件,我只得到:1: ERROR.

为什么会这样,我该如何解决?

0 投票
1 回答
375 浏览

c++ - flex 和 bison 的无效字符错误

我的问题:

下面的代码出现无效字符错误。

在这里,我只想在未定义parse-paramTDM_PIN_MAP_TEST的情况下定义,但出现以下错误。

行号28是指我上面指出的代码。

感谢任何解决上述错误的指针。