bison相关内容

yylloc在此范围内未定义

编译文件时出现以下问题.我已经按照如下方式覆盖了YYLTYPE的定义(尽管它与默认值相同,但是我将对其进行扩展 typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; ,当我在lex文件中添加以下内容时 ..
发布时间:2020-09-21 04:00:46 其他开发

带有flex和bison的END OF FILE令牌(仅在没有令牌的情况下有效)

好吧,这是一个奇怪的问题,因为我在这里拥有的东西以我想要的方式工作.我正在做的是为lambda微积分表达式编写解析器.因此,表达式可以是以下四项之一: 变量 恒定 (表达式) (lambda variable.expression) 现在您可以看到,最后两个表达式中包含表达式.我试图做的是确定整体表达方式,以便我报告它是哪种类型.因此,例如表达式((lambda x.(f1 x) ..
发布时间:2020-09-21 03:59:44 其他开发

如何将头文件放入Bison中的.tab.h?

我写了野牛代码标题: %{ #include "foo.h" %} 然后我在标头中定义了一个名为"Foo"的结构.我想将其用作Bison中的令牌类型. %define api.value.type union %token bar 然后我使用-d选项生成bison.tab.h文件. bison -d bison.y 但是bison.tab.h中没有#in ..
发布时间:2020-09-21 03:59:41 C/C++开发

如何在野牛中增加堆栈大小(并解决“内存耗尽")

我基于野牛的解析器开始扼杀我最近生成的一些中等大小的文件. 它引发了一个有关“内存耗尽"的异常. 野牛手册页说,这很可能是由于使用了右手递归.在不尝试重写语法的情况下(我的期限很紧),我想简单地增加堆栈以使解析器解析该文件.我试图遵循野牛手册页,并将YYMAXDEPTH定义为比默认值10000大的某个数字,但这没有用.当我查看bison的输出时,似乎仅在这种情况下,当定义YYSTACK ..
发布时间:2020-09-21 03:59:37 其他开发

此Bison代码中的移位/减少冲突来自何处?

我正在尝试解析此语法: 34 + 1 − 8, 32 * 87 + 6 / 4, 34 / 8 我希望这样接地: (, (- (+ 34 1) 8) (/ (+ (* 32 87) 6) 4) (/ 34 8)) 这是BISON的代码: %token NUMBER %token COMMA %token OPERATOR %left OPERATOR %left COMM ..
发布时间:2020-09-21 03:59:34 其他开发

我怎样才能有一个“隐式乘法"?野牛统治?

我正在为数学表达式解析器开发Bison文件.到目前为止,基本上都还可以,但是我面临着隐式乘法的问题. 您知道,我想支持2x sin(4x) cos(4x)之类的表达式.它应该像2 * x * sin(4 * x) * cos(4 * x)一样进行解析.这里没什么不好的,但是请考虑以下规则: expr : /* snip */ | '-' expr { /* n ..
发布时间:2020-09-21 03:59:23 其他开发

如何在yacc中对字符串使用yylval

我想传递令牌的实际字符串.如果我有一个名为ID的令牌,那么我希望我的yacc文件实际知道称为什么ID.我必须将使用yylval的字符串从flex文件传递到yacc文件.我该怎么办? 解决方案 请参见 Flex与YACC交互的手动部分. 15与Yacc接口 flex的主要用途之一是 yacc的同伴 解析器生成器. yacc解析器期望 调用名为yylex()的例程 查找下一个输入令 ..
发布时间:2020-09-21 03:59:21 其他开发

flex如何精确支持野牛定位?

我正在尝试使用flex和bison创建一个过滤器,因为我想从复杂的语言中获取某些语法元素.我的计划是使用flex + bison识别语法,并丢弃感兴趣的元素的位置. (然后使用脚本根据转储的位置获取文本.) 我发现flex可以支持称为bison-locations的bison功能,但是它的工作原理是完全正确的.我在flex文档中尝试了该示例,看来yylloc不是由flex自动设置的,我总是得 ..
发布时间:2020-09-21 03:58:19 其他开发

如何逃避flex关键字

我正在使用Flex&在Linux上的野牛.我有以下设置: //令牌 CREATE {返回令牌:: CREATE;} SCHEMA {返回令牌:: SCHEMA; } RECORD {返回令牌:: RECORD;} [_a-zA-Z0-9] [_ a-zA-Z0-9] * {yylval-> strval = strdup(yytext);返回TOKEN :: NAME;} ... ..
发布时间:2020-09-21 03:56:14 其他开发

类似于C语言的Bison Shift/reduce错误

我的野牛语法有问题,这给我带来了移位/减少错误,并且我已经为运算符定义了优先级. 我知道这是由expr规则的'expr binop expr'位引起的.这是我的野牛文件,以及我得到的输出.任何帮助将不胜感激. %token ID KEYWORD INTCON FLOATCON TYPE STRING %token IF WHILE FOR VOID RETURN %token AND_ ..
发布时间:2020-09-21 03:54:10 其他开发

在Bison下移位/减少与类C语法的冲突

为了个人娱乐,我一直在研究类似C的语法.但是,我已经遇到了转移/减少冲突,并且我很确定它们可以解决. 现在,我的expressions看起来像这样,以简化的形式包含了一些动作: %left '+' '-' %% expr : NUMBER | IDENTIFIER | expr '+' expr | expr '-' expr /* other operators like ..
发布时间:2020-09-21 03:53:05 其他开发

使野牛开始使用除开始规则以外的其他规则进行解析

当前,我正在使用源到源编译器,并且已经编写了一个野牛解析器,可以为输入正确创建AST.我现在需要对语法树进行一些转换,因此需要在树中插入许多节点. 我可以手动创建要添加到语法树中的所有结构/联合,但这似乎非常,需要很多工作. 对我来说,创建一个字符串要容易得多,并且我希望该字符串由已经拥有的解析器进行解析.然后解析器应返回此字符串的树,我可以将其插入原始语法树中. 不幸的是,无法 ..
发布时间:2020-09-21 03:53:02 其他开发

野牛在同一循环中的转到标签

我正在使用Bison和Flex进行解析器,我想创建一个“转到标签"语句,但是我想检查标签是否存在于同一代码块中(括号{},循环之间). 有没有检查这种事情的功能? 解决方案 您的问题意味着您在构建语言翻译器/编译器时缺少一些背景知识,因此,也许只有一个小教程可以帮助您解决问题.我希望你不要介意. 按惯例,计算机语言的处理分为一系列步骤(有时称为阶段或阶段).每个步骤处理整个任务 ..
发布时间:2020-09-21 03:53:00 其他开发

野牛:错误消息中包括行号

好的,所以我想我的问题是不言自明的. 我目前正在Bison中构建一个解析器,我想使错误报告更好一些. 当前,我设置了%define parse.error verbose(实际上会发出类似syntax error, unexpected ***********************, expecting ********************的消息. 我只想在错误消息中添加更 ..
发布时间:2020-09-21 03:51:54 C/C++开发

线程安全/可重入野牛+ flex

与任何解释相比,我真的更喜欢一个可行的示例.到目前为止,我在Bison的文档站点上所读到的任何内容都与Flex所说的相矛盾.有人说将yylex声明为 int yylex (yyscan_t yyscanner); 另一个人希望它成为: int yylex(YYSTYPE *lvalp, YYLTYPE *llocp); 我真正需要的是位置信息.我尚不确定是否需要YYSTYPE( ..
发布时间:2020-09-21 03:51:51 其他开发