PEG和空白/评论

Kru*_*lur 9 peg parser-generator

我有一些使用ANTLR编写解析器的经验,我正在尝试(自我教育:))将其中一个移植到PEG(Parsing Expression Grammar).

当我想要了解这个想法时,有一件事让我觉得麻烦,我觉得我已经错过了一些:如何处理空白.

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

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

Bar*_*ers 8

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

既然你熟悉ANTLR,可以这样想:让我们说ANTLR只处理PEG.所以你只有解析器规则,没有词法分析器规则.现在,你会如何丢弃空格?(你不能).

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

ANTLR

add_expr
 : Num Add Num
 ;

Add   : '+';
Num   : '0'..'9'+;
Space : ' '+ {skip();};
Run Code Online (Sandbox Code Playgroud)

PEG

add_expr
 : num _ '+' _ num
 ;

num : '0'..'9'+;
_   : ' '*;
Run Code Online (Sandbox Code Playgroud)