- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经尝试了一段时间,通过使用 bison 和 lex 来实现语法分析器。
我对 yylval 的类型重新声明有疑问,我自己解释。
我有 4 个文件:lexico.l、parser.y、funcionesTabla.c、funcionesTabla.h
第一个,包含 lex 的规范二、bison/yacc的规范最后两个,是一堆处理符号表的方法。
我在 funcionesTabla.h 中有:
typedef enum {
entero,
real,
caracter,
arrayEntero,
arrayReal,
arrayCaracter,
matrizEntero,
matrizReal,
matrizCaracter,
desconocido,
no_asignado
} dtipo ;
typedef struct{
int atrib ;
char *lexema ;
dtipo tipo ;
} atributos;
#define YYSTYPE atributos
我试过下一个:
在规则内,从 parser.y 尝试访问 yylval.tipo,没问题。
从 lexico.l 中,在 token 规则中,尝试访问 yylval.lexema(或任何属性),gcc 告诉我:
lexico.l: In function ‘yylex’:
lexico.l:93: error: request for member ‘lexema’ in something not a structure or union
make: *** [lex.yy.o] Error 1
有什么建议吗?
非常感谢,对不起我的英语。
最佳答案
David 是对的,默认情况下 yacc 给你一个 %union
指令,但是看到它被翻译成纯 C,你可以只在里面嵌套你的结构:
%union {
struct {
int atrib;
char *lexema;
dtipo tipo;
};
}
在支持联合内部匿名结构的 C 方言(例如 C99)中,它将像您期望的那样简单地工作。
关于bison/lex YYSTYPE 声明为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723464/
在我的 YACC 文件中,我有这个: %union { Node *node; FuncParamList *fParam; CallParamList *cParam;
我已经尝试了一段时间,通过使用 bison 和 lex 来实现语法分析器。 我对 yylval 的类型重新声明有疑问,我自己解释。 我有 4 个文件:lexico.l、parser.y、funcion
我需要使用 flex 和 bison 来解析一些代码。 YYSTYPE 的默认类型是 int ,尽管我从来没有那样声明过。这是野牛的默认设置吗? 将字符串传回对我有很大帮助。我读到这个: How to
我正在尝试运行这个: 斯塔克.lex %{ #include #include "y.tab.h" #ifndef YYSTYPE #define YYSTYPE char* #endif #def
当我突然开始遇到 SEGFAULT 时,我正在为一个非常简单的解析器构建一个解析器。我已将我的代码精简到最低限度的错误位置: 这是我的 test.flex 文件: %{ #include "test.
在我的 .l 文件中,我有以下内容: #include "SymbolInfo.h" #include "y.tab.h" using namespace std; int line_count =
我已将 YYSTYPE union 声明为 %union { char* stringValue; union int_double_string* ids; } in
我正在使用 char*如 YYSTYPE在用 flex 和 bison 构建的编译器中。线 #define YYSTYPE char* 位于我的语法文件的顶部。我的词法分析器中的一些标记需要传递它们与
我正在尝试使用 mingw 构建包含在 GNU binutils 中的 gold 链接器。我采取的步骤- 使用安装程序安装 mingw 和所有包。 使用 Windows 安装程序将 Windows 版
我正在使用 flex 和 bison 实现计算器,但是 double 值被解释为整数,然后我在互联网上寻找答案,我意识到错误可能是 bison 将数字解释为整数,所以如果我输入“1.2 "在 *yyl
我正在尝试将位置信息添加到flex和bison中。但是我的野牛仍然使用int yylex(void),但是找不到int yylex(YYSTYPE *yylval_param, YYLTYPE *yy
我正在尝试在flex和bison中创建一个编译器,但是当我尝试编译我的代码时,出现了这种类型的错误 我该如何解决这个问题? flex.l:17:8: error: invalid type argum
我是一名优秀的程序员,十分优秀!