我的问题是我试图运行一个我使用 flex-bison 扫描仪解析器编码的问题。我的程序应该做的是接受用户输入(在我的例子中,查询我正在设计的数据库系统)、lex 和解析,然后执行相应的操作。实际发生的是我的解析器代码没有正确解释我提供给它的字符串文字。
这是我的代码:
130 insertexpr : "INSERT" expr '(' expr ')'
131
132 {
133 $$ = new QLInsert( $2, $4 );
134 }
135 ;
我的输入,按照“查询:”提示:
查询:插入 abc(5);
输入:1.0-5:语法错误,意外字符串,预期文件结尾或行尾或 INSERT 或 ';'
现在,如果我从第 130 行的 parser.yy 代码中删除“INSERT”字符串文字,程序运行得很好。事实上,在存储输入数据(即“abc”和整数 5)后,它会正确返回给我。
起初,我认为这是字符编码的问题。Bison 代码需要使用相同的编码进行编译和运行,这应该不是问题,因为我正在从同一个终端编译和运行。
我的系统详情:
Ubuntu 8.10 (Linux 2.6.24-16-generic)
flex 2.5.34
bison 2.3
gcc 4.2.4
如果您需要更多信息或代码,请告诉我!