yacc相关内容

从PLY yacc访问并打印AST

我正在使用PLY编译一种语言(C-减法),以构建词法分析器和解析器。在PLY文档中很清楚,构建AST完全由用户决定(https://www.dabeaz.com/ply/ply.html#ply_nn2): Yacc.py的输出通常是抽象语法树(AST)。但是,这完全由用户决定。 那么,在我的词法分析器和解析器正常工作的情况下,我如何构建一个AST阅读器(因为正如文档中所说,输出是一个AST, ..
发布时间:2022-06-18 21:26:54 Python

用于 C# 的 Lex/Yacc?

实际上,可能不是成熟的 Lex/Yacc.我正在实现一个命令解释器前端来管理 web 应用程序.我正在寻找一些可以接受语法定义并将其转换为直接调用我的对象上的方法的解析器的东西.类似于 ASP.NET MVC 如何确定调用哪个控制器方法,以及如何处理参数. 所以,如果用户在我的命令提示符下输入“create foo",它应该透明地调用一个方法: private void Create(st ..
发布时间:2021-12-12 23:49:22 C#/.NET

创建 C/C++ 解析器/分析器的好工具

有哪些好的工具可以快速开始解析和分析 C/C++ 代码? 特别是,我正在寻找处理 C/C++ 预处理器和语言的开源工具.这些工具最好使用 lex/yacc(或 flex/bison)作为语法,不要太复杂.他们应该处理最新的 ANSI C/C++ 定义. 这是我目前发现的,但还没有详细研究它们(想法?): CScope - 老式 C 分析器.不过,似乎没有做完整的解析.被描述为用于 ..
发布时间:2021-12-12 23:33:27 C/C++开发

如何将 MySQL yacc 语法转换为 antlr LL(1)?

我正在用 ANTLR 构建一个 MySQL 语法验证器.我从 MySQL 源代码中的 sql_yacc.yy 开始,但我在转换以下语法时遇到了一些困难.我尝试了很多次,但它不起作用.有人可以帮我吗? expr: expr 或 expr|expr 异或 expr|expr 和 expr|NOT_SYM 表达式|bool_pri 是 TRUE_SYM|bool_pri 不是 TRUE_SYM|boo ..
发布时间:2021-11-11 03:45:07 数据库

用于 .NET 的好的解析器生成器(想想 lex/yacc 或 antlr)?仅构建时间?

.NET 有没有好的解析器生成器(想想 lex/yacc 或 antlr)?任何有执照不会吓到律师的人?很多 LGPL,但我正在研究嵌入式组件,有些组织对我依赖 LGPL 感到不舒服. 我听说 Oslo 可能会提供此功能,但我不确定它是构建时依赖项还是运行时依赖项.谁能澄清奥斯陆将提供什么? 更新 我真正想要的是一个解析器生成器,它只是构建时的依赖项.看起来 ANTLR 有一个运行时 ..
发布时间:2021-11-11 03:34:35 C#/.NET

Antlr 的优点(相对于 lex/yacc/bison)

我过去曾在各种项目中使用过 lex 和 yacc(更常见的是 bison),通常是翻译器(例如流式传输到 EDA 应用程序的 EDIF 子集).此外,我不得不支持基于可追溯到几十年前的 le​​x/yacc 语法的代码.所以我对这些工具了如指掌,尽管我不是专家. 过去我在各种论坛上看到过关于 Antlr 的正面评论,我很好奇我可能遗漏了什么.因此,如果您同时使用了两者,请告诉我 Antlr ..
发布时间:2021-11-11 03:33:45 C/C++开发

YACC左递归中的正确顺序

假设我们有以下简单的 YACC 语法: 开始:列表{如果 ($1 != NULL) {反转(&$1);/*正确的顺序*/}生成($1);};列表:项目清单{$$ = 节点($2, $1);}|{$$ = NULL;}; 有没有办法构造list的二进制抽象语法树(仍然使用左递归),这样元素的顺序就不必在start?作案手法是什么? 解决方案 并非如此. 左递归文法从左到右执行归约. ..
发布时间:2021-10-04 18:57:23 其他开发

Yacc:每个非终端后的代码

有没有办法在每个终端之后执行代码? 所以这样的事情是可能的: a : B { code } C { some code } 任何帮助将不胜感激! 解决方案 你给出的例子应该可以正常工作. ..
发布时间:2021-10-04 18:57:20 其他开发

如果在 yacc 文件中给出语法,如何创建符号表?

我得到了一个 yacc 文件,我应该创建一个符号表.对文件使用yacc后怎么办? 解决方案 你的问题很广泛,有书籍和在线资源可以回答. 最好先阅读一下,然后回来提出更有针对性的问题. 查看此 StackOverflow 问题的答案以获取 Yacc 教程的链接: https://stackoverflow.com/questions/641701/excellent-onlin ..
发布时间:2021-10-04 18:57:17 其他开发

有没有人用过“选择偏好"?由 MKS Yacc 提供?

因为我的问题根本没有答案是否有 MKS Yacc 的替代方案支持选择首选项语法或非常相似的东西?,我会问更基本的问题: 有没有人使用过“选择偏好"?由 MKS Yacc 提供? 如果有,你用它做什么?此外,在规则中的最后一个位置以外的任何地方使用它是否有意义? 我必须照顾一个包含规则的语法,例如: TOKEN1 LPAREN non_terminal1 [^EQUAL] TO ..
发布时间:2021-10-04 18:57:15 其他开发

为什么这个语法不解析 return 语句?

我正在尝试编写一个可以解析以下 3 个输入的语法 -- 测试文件--类 hi 实现 ho:var x:int;结尾;-- 测试文件 2 --接口xs:myFunc(int,int):int结尾;-- 测试文件 3 --类 hi 实现 ho:方法 myMethod(x:int)返回 y;结尾结尾; 这是lexer.l: %{#include #include #include "parser. ..
发布时间:2021-10-04 18:57:12 其他开发

Bison/Flex 解析问题

我正在使用 bison 和 flex,目前遇到了一些问题.当前读取第一个字符并将其传递给 Bison,但立即抛出 yyerror().它应该打印 1,因为 'w' 是由我的 Flex 规则定义的 Ident. 我无法确定问题的根源.我没有使用 Bison 的经验. 这是我的野牛解析规则: %%程序:StmtSeq {printf(“13");};StmtSeq : Stmt Stm ..
发布时间:2021-10-04 18:57:09 其他开发

如何读取lex和yacc中的多行输入?

我希望输出为: a=3 mov a,3a=fs mov b,fsb=32 移动 b,32 3地址中间代码生成程序-为词法分析编写的 lex 文件从命令行读取输入并传递标记: %{#include "y.tab.h";#include "string.h";#include %}%%[a-zA-Z]+ { yylval.var=(char *)malloc(sizeof(char *));st ..
发布时间:2021-10-04 18:57:06 其他开发

y.tab.c:对 yylex 的未定义引用

我正在尝试运行一个我在网上找到的计算器示例.但是每次运行我的 gcc 命令时都会显示此错误.这是我运行的命令: flex -l calc3.lyacc -vd calc3.ygcc y.tab.c -lm -ll -> 此时我收到此错误消息: /tmp/ccPOq58f.o :在函数“yyparse"中:y.tab.c:对“yylex"的未定义引用collect2: 错误: ld 返回 1 ..
发布时间:2021-10-04 18:57:02 其他开发

简单的 yacc 语法报错

我有一个关于 yacc 编译器的问题.我不编译简单的 yacc 语法.这是代码部分: /*anbn_0.y */%令牌 A B%%开始: anbn '\n' {printf(" is in anbn_0\n");返回 0;}anbn:空的|安本B;空的: ;%%#include "lex.yy.c"yyerror(s)字符 *s;{ printf("%s, 不在 anbn_0\n", s); ..
发布时间:2021-10-04 18:56:59 其他开发

如何在这个 yacc 文件中找到 shift/reduce 冲突?

当我尝试在以下文件上使用 yacc 时,出现错误冲突:1 shift/reduce如何找到并解决冲突? /* C-Minus BNF 语法 */%token 其他%令牌如果%token INT%token 返回%令牌无效%token WHILE%令牌ID%令牌 NUM%token LTE%token GTE%token 相等%token NOTEQUAL%%程序:声明列表;声明列表:声明列表声明 ..
发布时间:2021-10-04 18:56:56 其他开发

R 究竟如何解析右赋值运算符“->"?

所以这是一个微不足道的问题,但让我烦恼的是我无法回答它,也许答案会教会我更多关于 R 的工作原理的细节. 标题说明了一切:R 如何解析 ->,晦涩的右侧赋值函数? 我通常使用的技巧都失败了: `->` 错误:对象 -> 未找到 getAnywhere("->") 未找到名为 -> 的对象 而且我们不能直接调用它: `->`(3,x) 错误:找不到函数"->" 当 ..
发布时间:2021-10-04 18:56:53 其他开发

xml DTD 文件的解析器

我在实现解析器方面很新,我正在尝试解析 xml DTD 文件以为其生成上下文无关语法.我尝试了 pyparsing 和 yacc,但仍然可以得到任何结果.因此,如果有人可以为我提供一些技巧或示例代码来编写这样的解析器,我将不胜感激.下面是一个示例 DTD 文件: 提前致谢. 解决方案 这是一个开始,它会将数据解析为 ParseResults 数据结构,然后您可以遍历并为定义的 doc ..
发布时间:2021-10-02 18:42:55 Python

YACC规则没有减少

这是我的代码calc.y.我不断收到错误:yacc:1 条规则从未减少yacc: 3 减少/减少冲突 不太清楚这是什么意思 我在其他地方做过一些研究,但我现在迷路了.我猜所指的规则是程序和语句,但即便如此……reduce 规则是什么意思? %{#include 文件 *输出文件;int yyline = 1;int yycolumn = 1;%}%联盟{国际净值;结构{内部 v;字符 ..
发布时间:2021-07-13 19:57:24 其他开发

不区分大小写的关键字匹配

我正在编写用于解析计算机语言的语法,可以与 解析::Eyapp.这是一个 Perl 包,可简化为常规语言编写解析器.它类似于 yacc 和其他 LALR 解析器生成器,但有一些有用的扩展,例如根据正则表达式定义标记. 我想解析的语言使用关键字来表示部分和描述控制流.它还支持用作数据占位符的标识符.标识符永远不能与关键字同名. 现在,棘手的部分来了:我需要将关键字与标识符分开,但它们可能 ..
发布时间:2021-06-15 20:53:42 其他开发