【发布时间】:2021-12-24 18:55:01
【问题描述】:
我刚开始使用 Flex/Bison,我正在尝试翻译类似 pascal 的变量声明,如下所示:
VAR
V1: INT;
V2: INT;
END_VAR
像这样进入 C 变量声明:
int main ()
{
int V1;
int V2;
}
我编写了 lex 和 yacc 文件来描述所需的语法,然后在 cmd 中使用 flex、bison 和 gcc 实用程序对其进行编译。这一切都没有错误地完成。但是当我尝试在可执行文件中推送具有多个变量声明(与第一个代码示例相同)的代码文件时,我只会得到用 cmd 编写的“语法错误”。尽管代码必须非常简单,但我不知道如何获取有关此错误的任何其他信息。
--- 更新 ---
我使用了 Öö Tiib 答案,它有助于获取有关错误的信息。
我正在寻找我的 lex 文件中的一个错误:程序需要 ':' 字符,但它遇到了一些未定义的字符。那是因为正则表达式中的空格字符 [; j] 导致词法分析器将其识别为标记,尽管应忽略空格,如正则表达式 [ \t\n] 中所写。这就是 lex-file 的样子:
%{
#include "parser.tab.h"
#include <string.h>
%}
%%
[a-z]([a-z]|[0-9])* {
strcpy (yylval.var, yytext);
return ID;
}
"VAR" { return VAR; }
"END_VAR" { return END_VAR; }
"INT" { return INT; }
[:;] { return *yytext; }
[ \t\n];
%%
int yywrap ()
{
return 1;
}
【问题讨论】: