首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PEG和空格/注释

PEG和空格/注释
EN

Stack Overflow用户
提问于 2012-04-09 19:21:33
回答 2查看 1.8K关注 0票数 12

我有一些使用ANTLR编写解析器的经验,我正在尝试(自学:)将其中一个移植到PEG (解析表达式语法)。

当我试着去感受这个想法的时候,有一件事让我觉得很麻烦,以至于我觉得我错过了一些东西:如何处理空格。

在ANTLR中,处理空白和注释的正常方法是将标记放在隐藏通道中,但对于PEG语法,没有标记化步骤。考虑到诸如C或Java之类的语言,注释几乎在任何地方都可以使用,人们希望立即“隐藏”注释,但由于注释可能具有语义含义(例如,在生成代码文档、类图等时),因此不会简单地丢弃它们。

那么,有没有办法解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-13 19:13:35

因为没有单独的标记化阶段,所以没有“时间”来丢弃某些字符(或标记)。

既然您熟悉ANTLR,那么可以这样想:假设ANTLR只处理PEG。所以你只有解析器规则,没有词法分析器规则。现在,你将如何丢弃,比如说,空格?(你不能)。

所以,对你的问题的答案是:你不能,你必须在PEG中用空格规则乱丢你的语法:

ANTLR

代码语言:javascript
运行
复制
add_expr
 : Num Add Num
 ;

Add   : '+';
Num   : '0'..'9'+;
Space : ' '+ {skip();};

钉住

代码语言:javascript
运行
复制
add_expr
 : num _ '+' _ num
 ;

num : '0'..'9'+;
_   : ' '*;
票数 10
EN

Stack Overflow用户

发布于 2012-05-06 01:08:31

可以嵌套PEG解析器。其思想是第一个解析器使用字符,并将令牌提供给第二个解析器。第二个PEG解析器使用令牌并执行实际工作。

当然,这意味着与其他解析方案相比,您放弃了解析表达式语法的一个优势: PEG的简单性。

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

https://stackoverflow.com/questions/10072451

复制
相关文章

相似问题

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