问题标签 [bison]
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.
yacc - Bison 语法错误(初学者)
我回来了,现在正在编写自己的语言和操作系统,但是由于我现在开始开发自己的开发语言,所以在使用 Bison 时遇到了一些错误,我不知道如何解决它们。这是我的 *.y 文件代码:
当我尝试将 Bison 与此源代码一起使用时,我收到此错误:
calc.y:1.1-5:语法错误,意外标识符:
c - 使用 Bison 时的错误
现在我得到了其他的东西。当我执行 a 时bison -d calc.y
,我在控制台中获得了许多源代码(带有 many m4_define
),但它不会生成任何文件。现在我的代码是这样的:
原始问题
我正在尝试创建自己的开发语言,但是很难开始,而且当我开始时,我遇到了很多错误,我不知道如何解决。这是我的代码:
calc.y 源代码文件:
现在编译器日志:
怎么了?
yacc - 野牛和 lex 字符串与 char
我正在尝试评估和表达形式
expr 可以是由某些字符组成的字符串,也可以是上面的函数。所以这可能看起来像
问题是,如果我以
如果我有类似的东西,我在构建语法时遇到问题
而且我不太确定语法是否错误或我的 AST 实现。
我发现我的逻辑有缺陷,因为在 nm expr 的情况下, expr expr 将返回 n*m 的值,它仍然是 nm。这会导致无限循环吗?我应该如何解析这样的表达式。
不要扔石头。野牛新手
后来的编辑 我设法清理并测试了 AST 和一些链表背后的代码。唯一的问题仍然是语法。
对于 Frac[m^2][m^4] node / node K m^4 node K m^4 这样的 expr,此语法失败
bison - 使用 Bison 时看到垃圾
我正在尝试使用Bison进行编译(我不知道这是否是正确使用的词),但是当我尝试编译此源代码时:
我在控制台中得到了一些“垃圾”(不是在文件或类似的东西中),看看: http: //pastie.org/650893
此致。
c - 什么是“\t%.10g\n”
我是 Bison 的新手,但是在 C/C++ 中没有,在这个开发和正则表达式的时候,我从来没有听说过这样的东西,只有\n
那用于新行,但我想知道\t%.10g
, 那的解释是什么在代码中是这样的:
最好的祝福。
c - Flex 和 Bison 的词汇搭配
我一直在寻找一种不符合一般 Flex/Bison 范式的语言。根据语义上下文,它具有完全不同的令牌规则。例如:
Bison 显然支持对这些类型的语法的识别,但它需要“ Lexical Tie Ins ”来有效地支持它们。它为此提供了一个接口——但我对如何根据上下文提供不同的弹性正则表达式感到困惑——如果这是可能的话。
提前致谢 :)
c++ - 简单的 Flex/Bison C++
我已经在寻找答案,但是对于一个简单的示例,我没有得到任何快速响应。
我想使用 g++ 编译一个 flex/bison 扫描器+解析器,只是因为我想使用 C++ 类来创建 AST 和类似的东西。
在互联网上搜索我发现了一些漏洞,都说唯一需要的是在 lex 文件中使用 extern "C" 声明一些函数原型。
所以我的 shady.y 文件是
而 shady.l 文件是
最后在makefile中我使用g++而不是gcc:
flex 和 bison 工作正常,但在链接时出现以下错误:
当然,如果我尝试更改野牛文件中有关函数的任何内容,它会说 yylex 未在 yyparse 的范围内声明。
我是否试图简单地解决比看起来更复杂的问题?实际上,我不需要一个封闭的结构来以面向对象的方式访问解析器和词法分析器,我只是想让它工作。
我只想能够在野牛文件中使用 C++(创建 AST)并从 C++ 对象调用 yyparse() ..
提前致谢
macros - 在 yacc/bison lex 中处理 #define 宏
我将如何#define
使用 yacc/bison 实现宏?
我在想所有定义的字符都必须匹配一个常规变量。变量被定义为[a-zA-Z_][a-zA-Z0-9_]*
所以我想我可以在那里检查变量是否已定义有效。然后将文本替换为应有的内容。
我怎样才能做到这一点?现在我想完全忽略 BAD 这个词,就好像我#define BAD
在 C 中定义它一样。下面是该 lex 规则的代码,但我做错了。lex 还抱怨“BA”在流中。我知道下面是完全错误和不合逻辑的,所以我如何忽略 BAD,然后如何用 float 之类的东西替换它
我知道主要步骤是 1)定义定义,2)在源代码中检测它 3)让 lex 忘记宏字符 4)插入新的正确字符。
warnings - Bison 构建警告:“给出了 -s 选项,但可以匹配默认规则”
我收到警告
如果你用谷歌搜索“选项给定但默认规则可以匹配”,你会 在诊断部分的旧 Flex 手册页中找到Flex 手册中关于诊断的章节和此条目:
警告,'-s option given but default rule can be match' 意味着默认规则(匹配任何单个字符)有可能(可能仅在特定的开始条件下)是唯一匹配特定输入的规则。既然
-s
给出了,大概这不是故意的。
我的构建文件没有-s
选项。我写
如何解决此警告?
这是我的 lex 文件的一个小版本。此文件还会触发警告
printing - 创建打印功能
我正在学习 Bison,此时我唯一做的就是rpcalc示例,但现在我想实现一个打印函数(如printf
C),但我不知道如何做到这一点,我正在计划有这样的语法print ("Something here");
,但我不知道如何构建打印函数,也不知道如何创建它;
作为行尾。
谢谢你的帮助。