问题标签 [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.
grammar - 如何将文字从 flex 返回到 yacc?
在我的 yacc 文件中,我有如下内容:
ID、NUM、INT 和 VOID 是从 flex 返回的标记,因此 yacc 识别它们没有问题。问题是上面有'['和';'之类的东西。当这些都被flex识别出来了,应该给yacc返回什么?
grammar - 我用 flex/yacc 制作的程序并不总是能识别标识符
我制作了一个应该识别简单语法的程序。当我输入我认为应该是有效的陈述时,我得到一个错误。具体来说,如果我从一个标识符开始,我会自动得到一个语法错误。但是,我注意到如果标识符前面带有“int”,则使用标识符不会产生错误。如果 a 是一个标识符,那么如果我输入 'int a;' 还行吧。但是如果我输入 'a = 3' 我会得到一个错误。只需键入 a 本身就会产生错误。
lex 文件:
yacc 文件
syntax - 我的语法有什么问题
我尝试将以下内容输入到我的 yacc 解析器中:
根据 yacc 文件中定义的内容,它看起来对我有效,但在返回后我收到“语法错误”消息。这是为什么?
yacc 文件:
gcc - 我的 flex/yacc 程序在两台不同的 linux 机器上编译不同
一台机器,一切编译正常。在另一台机器上,当我使用 gcc 创建输出文件时,它会抱怨 -ly 选项。如果我删除 -ly 选项,那么它会生成程序,但它会以不同的方式运行。发生了什么。如何让程序在这台 linux 机器上正确运行?
parsing - 这个 yacc 解析器有什么冲突?
我在 yacc 中使用了 -v 选项来生成一个 y.output 文件。在文件的顶部它说
状态 98 冲突:1 班次/减少
文件的下方是以下内容:
冲突是什么,如何解决?
c++ - 在 C/C++ 中搜索字符串解析器
我从事一个专注于圣经文本的开源项目。我想创建一个标准的字符串格式来构建一个搜索字符串。然后我需要解析搜索字符串并使用给定的选项运行搜索。有许多不同的选项,从搜索范围到搜索多个文本,再到通配符等。
我在想使用 lex/yacc 之类的东西来为这种格式生成解析器可能是个好主意。我认为 Xapian 项目使用柠檬来实现类似的目标。我的问题是,使用这些工具中的一个(或多个)是完成此任务的最佳方式吗?
除了这个问题,我会很感激任何指向这些工具(以及任何其他可能是选项)的资源的链接。到目前为止,我遇到的最大问题是大多数示例和教程要么面向编程语言,要么面向计算器之类的简单工具,而不是解析字符串格式。
gcc - 为什么我的 flex/yacc 编译器不能在另一台 linux 机器上正确编译
在我的机器(运行 cygwin 的 Windows)上,它可以正确编译。Flex 是 2.5.35 版,bison 是 2.3 版
在 linux 机器 1 上它可以正确编译。Flex 是 2.5.4 版,bison 是 1.875c 版。
在 linux 机器 2 上它不能正确编译。Flex 是 2.5.4 版本,bison 是 2.3。
通过查看 flex/bison 版本号,人们会期望,如果它在我的机器上正确编译,它会在机器 2 上正确编译,但事实并非如此。
在 linux 机器 2 上,当我运行 gcc -c y.tab.c 时,我多次收到以下警告
警告:内置函数“printf”的隐式声明不兼容
当我运行以下
gcc -o cminus y.tab.o lex.yy.o -ly -lfl
我收到以下错误。
这个错误可以通过去掉 gcc 中的 -ly 选项来消除,这样程序就可以编译了,但是编译后的程序不能像在我的机器和另一台 linux 机器上那样正常运行。
什么可能导致问题?
grammar - 此 yacc 代码中是否存在移位/减少错误?
我收到来自 yacc 的消息,说存在转移/减少冲突。我认为它来自 yacc 文件的这一部分。
你能看出冲突吗?如何修复?
yacc - 野牛文件结尾
如果我忘记在任何文件的末尾放置一个空行,我的程序就会出现语法错误。问题是我的语法需要换行符来结束当前行。由于不存在换行符,因此野牛会生成语法错误,因为它没有完成规则。
我该如何解决这个问题?我尝试<<EOF>>
返回MY_EOF
但当我这样做时 lex 崩溃了一个可怕的死亡。我猜它的默认 EOF 中有我没有调用的代码。我不知道它们可能是什么功能。使用 EOF 创建错误symbol EOF is used, but is not defined as a token and has no rules
c++ - 如何解决 YACC 中的这种 Shift/Reduce 冲突
我有这样的语法:
“匹配一个或多个规则 1,其中规则 1 是一个或多个规则 2,其中规则 2 是一个或多个规则 3,等等。每个规则由换行符分隔”。看下面的例子。
这样做我会遇到 shift/reduce 冲突,如何更改语法以停止?本质上,它需要在新行之后分支并查看下一个是 TERMINAL2 还是 TERMINAL3。