首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在yacc中跳过令牌

在yacc中跳过令牌
EN

Stack Overflow用户
提问于 2012-06-03 23:18:30
回答 3查看 2K关注 0票数 3

我希望在我的yacc文件中有如下语法规则:

代码语言:javascript
复制
insert_statement: INSERT INTO NAME (any_token)* ';'

在yacc中,我们可以跳过所有标记,直到出现错误时的给定标记,如下所示:

代码语言:javascript
复制
stat: error ';'

有没有什么机制可以在没有错误的情况下跳过yacc中任意数量的字符?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-31 14:47:20

过了一段时间后,我可以用下面的方法来解决我的问题,我想提一下,因为这对某人很有帮助:

  • 向lex添加一个令牌定义,包括跳过令牌中应包含的字符:

<*>A-Za-z0-9_:.-* { return SKIPPINGTOKS;}

(这将标识任何令牌,如a、1、hello、hello123等。)然后,

  • 根据需要将以下规则添加到yacc:

insert_statement:插入到名称skipping_portion ';'

skipping_portion : SKIPPINGTOKS |skipping_portion SKIPPINGTOKS

希望这能帮助到一些人。

票数 3
EN

Stack Overflow用户

发布于 2012-06-05 07:30:45

我认为你会想要做这样的事情。它跳过所有不是分号的标记。

代码语言:javascript
复制
insert_statement: INSERT INTO NAME discardable_tokens_or_epsilon ';' ;

discardable_tokens_or_epsilon:    discardable_tokens
                                | epsilon
                                ;

discardable_tokens:   discardable_tokens  discardable_token
                    | discardable_token
                    ;

discardable_token:   FOO 
                   | BAR
                   | BLETCH
                   ...et cetera... anything other than a semicolon
                   ; 

epsilon: ; 
票数 2
EN

Stack Overflow用户

发布于 2012-06-04 23:01:33

简单地说,不要指定包含这些令牌的产生式规则,您想跳过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10871496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档