我的问题是,我想运行我使用柔性野牛扫描器解析器编码的问题。什么我的程序是应该做的是采取用户输入(在我的情况下,对于数据库系统查询我设计),lex和解析,然后执行相应的动作。实际发生的是,我的解析器代码没有正确解释字符串文字,我给它。

下面是我的代码:

130 insertexpr :  "INSERT" expr '(' expr ')'
131 
132                  {
133                         $$ = new QLInsert( $2, $4 );
134                          }
135                         ;

和我的输入,以下 “查询:” 提示:

  

查询:INSERT ABC(5);结果   输入:1.0-5:语法错误,突发串,期望文件或行或INSERT或结束的结束“;”

现在,如果我删除“插入”串从线路130我parser.yy码文字,程序运行得很好。事实上,存储输入数据(即,“ABC”和整数5)之后,它正确地返回权还给我。

起初,我认为这是与字符编码的问题。需要编译和使用相同的编码,这应该不是一个问题看到,因为我编译和从相同的终端上运行运行野牛代码。

我的系统的细节:

的Ubuntu 8.10(Linux的2.6.24-16-通用),点击 2.5.34弯曲结果 野牛2.3结果 GCC 4.2.4结果

如果您需要任何更多的信息或代码,让我知道!

有帮助吗?

解决方案

这是一个经典的错误,如果你使用Flex LEX您的输入令牌,你一定不是指在解析器为文字字符串字面字符串,而是使用令牌他们。

有关详情,请参阅

此类似的问题

其他提示

Thankee,thankee,thankee!

只是为了澄清,这里是我如何实现我的解决方案的基础上,从jpalecek的意见。首先,我声明在野牛代码一个INSERT令牌(parser.yy):

71 %token INSERT

接着,我定义在flex代码令牌(scanner.ll):

79 "INSERT INTO" { return token::INSERT; }

最后,我使用的令牌INSERT在我的语法规则:

132 insertexpr :  INSERT expr '(' expr ')'
133 
134                  {
135                         $$ = new QLInsert( $2, $4 );
136                          }
137                         ;

和瞧!我过度扩张的头痛终于结束了!

谢谢,jpalecek:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top