问题标签 [yacc]
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.
c - 使用 GCC 和 Flex/Bison 发出无效警告的声明
使用 gcc 和 -Wall 选项编译我的项目时,我收到一条警告,提示我的 flex 文件最后一行不存在的语句无效:
警告:
外壳命令:
lex 文件的最后一部分:
任何人都知道为什么我可能会收到此警告?
如果我禁止所有 #line 指令,则错误是:
其中指的是 ECHO 行:
compiler-construction - 使用野牛解析元素列表
我正在为着色引擎编写一个编译器,并且每个编译器都运行良好,直到我到达语句解析部分。
我使用了一个用类定义的抽象语法树来完成所有工作(以简化类型检查和中间代码生成)。所以我有一个祖先类ASTNode
和所有降级类,如ASTFloat
,等等。ASTExpression
ASTIdentifier
在.y
文件中,我能够以常见的方式构建 AST:
它工作得很好,但是后来我尝试以这种方式生成范围的语句(例如if语句的主体):我使用了一个类ASTStatements
,该类具有ASTNode*
必须由解析器在遇到的每个语句时填充的列表。
因此,该方法将类似于以下内容:
问题是每个语句块应该只初始化一次该项目,但我不知道该怎么做。Usingif ($$ == null)
是我尝试过的一种技巧,但它不起作用,因为它yylval
可以包含到目前为止的任何内容。
使用 Bison 处理这种情况的正常/最佳方法是什么?
c - flex/lex yacc/bison 多线程环境
我可以在多线程环境中使用 flex/bison|lex/yacc 生成的代码吗?恐怕有很多全局变量。如何解决?
yacc - 从 BNF 文法导出状态机
我正在尝试整理 XSS 安全字符串插值方案的概念证明。
给定一个带有替换的字符串,
我想把它分解成文字部分和替换("Hello<b>" planetoid "</b>!")
,然后在文字部分上从左到右运行一个状态机。当我达到一个插值(planetoid
在上面)时,我需要能够从状态到一个适当的转义函数。
有谁知道如何使用 lex/yacc/bison 派生状态机并能够将语法中的标签与输出状态相关联的任何示例?我想派生一个我可以在 javascript 中使用的状态机,并尝试替换 PHP 的底层字符串实现。
这里描述了我这样做的原因。
干杯,迈克
c - 语法中的左递归导致冲突
在整个 Bison 语法中,我都在使用右递归,并且我读过左递归更好,因为它不必先构建整个堆栈。
但是,当我尝试在其中任何一个上切换到左递归时,我总是会遇到很多冲突,我不明白为什么。
谁能告诉我一个通用示例,说明使用左递归而不是右递归会导致冲突(当右递归不会导致冲突时)。那么在切换到左时需要做什么来纠正这样的冲突。我认为一个基本的例子对我的帮助不仅仅是纠正我自己的语法。
编辑:
但我想无论如何我都应该包含一个特定的示例,因为我的理解还不够完整:-) 将“列表分隔符命令”更改为“命令分隔符列表”可以解决冲突。
c - 使用 GDB 检查 Bison 的 $$ 变量
如果我在 Bison .y 文件中设置断点,有没有办法可以在该断点检查 $$ 伪变量的内容?
c - 转移/减少冲突 yacc
请参阅以下 yacc 代码。如果我删除生产因素:'!' expr,解析冲突消失。这里发生了什么?
yacc - 如何在这个 yacc 文件中找到 shift/reduce 冲突?
当我尝试在以下文件上使用 yacc 时,我得到错误冲突: 1 shift/reduce 我怎样才能找到并解决冲突?
yacc - 如果在 yacc 文件中给出语法,如何创建符号表?
我得到了一个 yacc 文件,我应该创建一个符号表。对文件使用 yacc 后该怎么办?
parsing - 解析器和扫描器有什么区别?
我已经做了一个扫描仪,现在我应该做一个解析器。有什么不同?