bison相关内容
我正在尝试获取C++Bison中令牌的名称: 例如%token TPLUS "+" TMINUS "-" TMUL "*" TDIV "/" 但是,在Bison的C++变体中,%token-table不执行任何操作。 我注意到在生成的bison代码中有一个令牌映射: const char* const parser::yytname_[];,但它是私有的。 有人知道如
..
我正在学习Bison生成C++分析器。 由于%token-table已过时,是否有其他方法可以在c++解析器中从内标识整数值中获取名称? 推荐答案 您可以使用manual section on syntax error reporting中介绍的yysymbol_name()。 C++API显然有一个类似的method on the parser context objec
..
同时使用flex和bison时 flex文件为什么需要#include由Bison创建的C标头? 编译需要bison和flex创建的C源文件。Bison和flex创建的C源文件对彼此有什么要求? 推荐答案 Bison生成的头中最重要的是用于标识令牌类型的枚举值(这些值是由词法操作返回给解析器的值)。 标头还声明YYSTYPE语义类型和变量yylval(具有该类型),用于将
..
免责声明:尽管我已经完成了本教程:http://ds9a.nl/lex-yacc/cvs/lex-yacc-howto.html ,但我只是个新手 现在,我正在为OpenGL-C++中的一个项目构建一个视频游戏。Cpp包含所有的游戏图形、逻辑等(相当容易管理,所以不是问题)。在游戏开始之前,它需要解析一个配置文件(让我们假设它是任意格式,所以INI和JSON API是不成问题的)。 我了
..
我在C文件中有一个字符串,如下所示: char *test = "print x"; 我想用我编写的Bison解析器来解析它。有可能吗? 推荐答案 Bison解析器根本不读取输入。它们只是通过重复调用yylex来获得一系列令牌。(或者,使用现代野牛,您可以创建一个“推式解析器”,它在连续的调用中被赋予令牌。)因此,实现yylex的对象负责输入。 如果您使用flex创建词法扫
..
我想知道如何在bison+flex中将缩进实现为块分隔符。就像巨蟒一样。我正在编写自己的编程语言(主要是为了好玩,但我打算将其与游戏引擎一起使用),我会尝试想出一些特殊的东西,使样板程序最小化,开发速度最大化。 我已经用C编写了一个编译器(实际上是`langToy‘到Nasm的转换器),但失败了。由于某种原因,它只能处理整个源文件中的一个字符串(嗯,我已经醒了超过48小时-所以……你知道,大
..
..
我正在 Bison 中为一种简单的动态类型语言创建语法.我有一个“通用"expression 规则,它有点类似于 C 中右值的概念;表达式出现在赋值的右侧,它们也可以作为参数发送给函数等.规则的一个大大简化的版本如下: 常量表达式: TOK_INTEGER_CONSTANT|TOK_FLOAT_CONSTANT|字符串字面量;表达: 常量表达式|标识符|布尔表达式|booleanExpressi
..
我一直在尝试遵循 http://gnuu.org/2009/09/18/writing-your-own-toy-compiler/5/(使用 flex、bison 和 llvm)但是在输入行时 g++ -o parser parser.cpp tokens.cpp main.cpp 我收到以下错误: 在/usr/local/include/llvm/Support/PointerL
..
我正在尝试编写一个简单的 YAML 解析器,我从 yaml.org 阅读了规范,在开始之前,我想知道编写手动解析器是否更好,或者使用 lex (flex/bison).我查看了 libyaml (C 库) -似乎没有使用 lex/yacc.YAML(不包括流样式),似乎更面向行,所以,是吗更容易编写手动解析器,或使用 flex/bison谢谢. 解决方案 这个答案基本上是对以下问题的回答:
..
在 Bison 中实现简单的 while 循环的最佳方法是什么?如果它有所不同,我使用的是 C,但我也可以使用 C++. 解决方案 您的问题并不适合 Stack Overflow 的答案.它非常详细,已经写了很多关于它的书. 基本答案是您没有在 Bison 中实现 while 循环.野牛不是那种意义上的语言.Bison 根据语法和与该语法中的规则相关联的操作构建解析器. 解析器
..
我在 Visual Studio 中编译了我的野牛生成的文件,并得到了这些错误: ...\position.hh(83): error C2589: '(' : '::'右侧的非法标记 ...\position.hh(83):错误 C2059:语法错误:'::' ...\position.hh(83): error C2589: '(' : '::'右侧的非法标记 ...\positi
..
我正在为一种简单的类似 BASIC 的语言编写一个小型解释器,作为使用 avr-gcc 工具链在 C 语言中的 AVR 微控制器上的练习.但是,我想知道是否有任何开源工具可以帮助我编写词法分析器和解析器. 如果我写这个在我的 Linux 机器上运行,我可以使用 flex/bison.现在我把自己限制在 8 位平台上,我必须手工完成,还是不? 解决方案 我已经实现了一个针对ATmega
..
我正在尝试将一个语法从 bison 翻译成 ANTLR.野牛的语法本身非常简单,但我找不到这样做的简单方法. bison 中的语法: expr = expr 或 expr |expr 和 expr |(expr) 欢迎任何提示/链接/指针. 谢谢,尤利安 解决方案 在 ANTLR 中,您不能创建左递归规则: a : a b; 尾递归很好: a : b a; 有关左递
..
我过去曾在各种项目中使用过 lex 和 yacc(更常见的是 bison),通常是翻译器(例如流式传输到 EDA 应用程序的 EDIF 子集).此外,我不得不支持基于可追溯到几十年前的 lex/yacc 语法的代码.所以我对这些工具了如指掌,尽管我不是专家. 过去我在各种论坛上看到过关于 Antlr 的正面评论,我很好奇我可能遗漏了什么.因此,如果您同时使用了两者,请告诉我 Antlr
..
我正在尝试编写一个可以解析以下 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.
..
我正在使用 bison 和 flex,目前遇到了一些问题.当前读取第一个字符并将其传递给 Bison,但立即抛出 yyerror().它应该打印 1,因为 'w' 是由我的 Flex 规则定义的 Ident. 我无法确定问题的根源.我没有使用 Bison 的经验. 这是我的野牛解析规则: %%程序:StmtSeq {printf(“13");};StmtSeq : Stmt Stm
..
首先,我对 flex 和 bison 非常陌生,我似乎真的无法解决这个问题. 我已经创建了 flex 和 bison 文件,编译工作正常,这里是我的 flex 和 bison 文件 (ps 评论是法语)弹性: %{//定义 en 语言 C#include"minilang.tab.h"extern int yylval;extern int nbrligne;%}//les defi
..
我已经花了两天的时间试图弄清楚该程序为何采用这种方式.对于一个类项目,我试图编写一个解析地址并以某种方式输出地址的程序.在我真正进入程序的输出部分之前,我只想确保Bison-fu实际上是正确的,并正确输出一些调试信息. Flex和Bison看起来好像很好地相互协作,正如预期的那样,但是由于某种原因,当我解析地址的第三行时,yytext只是跳过了邮政编码,直接转到新行. 以下是我测试过的
..
我正在为类似C的语法编写解析器,但是遇到了移位/减少冲突的问题: 基本上,语法接受一系列可选的全局变量声明,后跟函数. 我有以下规则: 程序:global_list function_list;type_name:TKINT/*整数*/|TKFLOAT/*浮动*/|TKCHAR/*字符*/global_list:global_list var_decl';'|;var_decl:ty
..