问题标签 [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.
yacc - 有没有人用过 MKS Yacc 提供的“选择偏好”?
由于我的问题完全没有得到任何答案,是否有替代 MKS Yacc 支持选择偏好语法或类似的东西?,我会问更基本的问题:
- 有没有人用过 MKS Yacc 提供的“选择偏好”?
如果有,你是用来做什么的?此外,在规则中的最后一个位置以外的任何地方使用它是否有意义?
我必须照顾一个语法,其中包括以下规则:
除非我误解了某些东西,否则嵌入式选择首选项在这种情况下不会提供任何价值。
背景
MKS Yacc 支持他们的网站称为“选择首选项语法”的符号。它没有说明,但它由方括号中的标记或标记列表和插入符号(可能是可选的)组成,并且它指示特定标记不得遵循此构造,但该标记不计为一部分这条规则:
所以,这条规则说 aTOKEN1
后跟 anon_terminal2
和 aTOKEN2
是 a non_terminal1
,除非下一个标记是 aTOKEN3
在这种情况下适用其他规则。
(我不清楚括号中的项目是否可以是非终端。我看到的使用符号的代码总是使用一个标记或几个空格分隔的标记,而不是非终端。我也不是明确是否需要插入符号;同样,我看到的所有示例都使用插入符号。)
lisp - yacc 中的 Lisp 语法
我正在尝试构建 Lisp 语法。容易,对吧?显然不是。
我提出这些输入并收到错误...
这是语法...
据我所知,我需要一个定义为程序的非终端,整个解析树都可以挂在上面。但我试过了,它似乎没有用。
编辑 - 这是我的“顶级终端”方法:
但它允许出现以下问题:
Edit2: FLEX 代码是...
过度匹配的一个例子......
这里有什么错误?
编辑:错误在词法分析器中。
c++ - 用于创建 C/C++ 解析器/分析器的好工具
有哪些好的工具可以快速开始解析和分析 C/C++ 代码?
特别是,我正在寻找处理 C/C++ 预处理器和语言的开源工具。这些工具最好使用 lex/yacc(或 flex/bison)作为语法,不要太复杂。他们应该处理最新的 ANSI C/C++ 定义。
这是我到目前为止发现的,但还没有详细研究它们(想法?):
- CScope - 老式 C 分析器。不过,似乎没有进行完整的解析。被描述为用于查找 C 函数的美化“grep”。
- GCC - 每个人都喜欢的开源编译器。非常复杂,但似乎可以做到这一切。有一个用于创建 GCC 扩展的相关项目称为GEM,但自 GCC 4.1 (2006) 以来尚未更新。
- PUMA - 纯机械手。(来自页面:“该项目的目的是提供一个类库,用于分析和操作 C/C++ 源。为此,PUMA 提供了用于扫描、解析和操作 C/C++ 源的类。”) . 这看起来很有希望,但自 2001 年以来一直没有更新。显然 PUMA 已被合并到AspectC++中,但即使是这个项目自 2006 年以来也没有更新过。
- 各种 C/C++ 原始语法。你可以得到c-c++-grammars-1.2.tar.gz,但它自 1997 年以来一直无人维护。谷歌搜索一下就可以找到其他可以作为起点的基本 lex/yacc 语法。
- 还有其他人吗?
我希望以此为起点,将 C/C++ 源代码翻译成新的玩具语言。
谢谢!-马特
(添加 2/9):只是澄清一下:除了 C/C++ 代码本身之外,我还想从预处理器中提取语义信息。我不希望“#define foo 42”消失在整数“42”中,但仍与名称“foo”相关联。不幸的是,这排除了几个首先运行预处理器并且只提供 C/C++ 解析树的解决方案)
c# - 用于 C# 的 Lex/Yacc?
实际上,也许不是成熟的 Lex/Yacc。我正在实现一个命令解释器前端来管理一个 webapp。我正在寻找可以接受语法定义并将其转换为直接调用我的对象上的方法的解析器的东西。类似于 ASP.NET MVC 如何确定调用哪个控制器方法,以及如何计算参数。
因此,如果用户在我的命令提示符下键入“create foo”,它应该透明地调用一个方法:
哦,如果它可以从那些控制器方法的(例如)属性中生成帮助文本,那也太棒了。
shell - yacc,只应用一次规则
我正在尝试使用 yacc 和 lex 编写 shell,但我的 I/O 重定向器遇到了一些问题。目前,我可以按任何顺序很好地使用 < 和 > 运算符,但我的问题是我可以重定向两次而没有错误,例如“ls > log > log2”
我的规则代码如下,谁能给我一些关于如何解决这个问题的提示?谢谢!
编辑:在与我的 TA 交谈后,我了解到我实际上不需要为我的命令只使用 1 个修饰符,而且我实际上可以拥有相同 I/O 重定向的多个副本。
c++ - 在哪里可以找到 C++ 语言的标准 BNF 或 YACC 语法?
我正在尝试开发一种代码生成器来帮助对遗留的 C/C++ 混合项目进行单元测试。我没有发现任何一种独立的工具可以从声明中生成存根代码。所以我决定建一个,应该不会那么难。
拜托,任何人都可以给我一个标准的语法链接,用 yacc 语言更好地描述。
希望我不是在重新发明轮子,在这种情况下请帮助我。
最好的问候,凯文
parsing - Flex/Lex 和 Yacc/Bison 有什么区别?
Flex & Lex 和 Yacc & Bison 有什么区别。我在互联网上疯狂搜索,但没有找到任何可靠的答案。
我可以在 Ubuntu 上安装纯 Lex 和 Yacc,还是只能安装 flex 和 bison。我很困惑。
- Lex 或 Yacc 是否仍由某人维护?
- 他们都是免费的吗?
如果 Lex 不是免费的,为什么我要在我的 Ubuntu 发行版上安装它?
/li>
dictionary - 在 lex/yacc 中使用字典数据结构
我正在为使用 lex/yacc 创建的微处理器编写汇编程序。
我想在我的汇编代码中实现标签,我认为这样做的一个好方法是有一个 {name:line#} 形式的标签字典。然后我可以在插入标签时检查,如果它已经定义,它是一个错误。
那么如何在 lex/yacc 中使用字典结构呢?
parsing - 同一个应用程序中是否可以有两个或多个 Lex/Yacc 解析器
我有一个应用程序,其中我已经有一个用于一种语法的解析器,我需要为另一个目的添加第二种不同的语法。
是否可以拥有多个?
如果是这样,你如何获得另一个入口点?
谢谢
大卫艾伦芬奇
bison - Lex/Yacc:输入前打印消息
我试图弄清楚在使用 lex/yacc (flex/bison) 时如何显示消息/提示。
例如, main 看起来像这样:
哪个调用yacc,哪个调用yylex()。这会产生一个在 STDIN 上等待的空行。我怎样才能显示类似...的消息
代替
其中下划线表示光标位置,等待来自 STDIN 的输入...
忘了提,我希望重复打印提示......所以在每次 lex/yacc 从标准输入请求输入之前......