Kru*_*lur 9 peg parser-generator
我有一些使用ANTLR编写解析器的经验,我正在尝试(自我教育:))将其中一个移植到PEG(Parsing Expression Grammar).
当我想要了解这个想法时,有一件事让我觉得麻烦,我觉得我已经错过了一些:如何处理空白.
在ANTLR中,处理空格和注释的常规方法是将标记放在隐藏的通道中,但是使用PEG语法时,没有标记化步骤.考虑到诸如C或Java之类的语言,几乎在任何地方都允许使用注释,人们希望立即"隐藏"注释,但由于注释可能具有语义含义(例如,在生成代码文档,类图等时),不会只是想丢弃它们.
那么,有没有办法解决这个问题?
因为没有单独的标记化阶段,所以没有"时间"来丢弃某些字符(或标记).
既然你熟悉ANTLR,可以这样想:让我们说ANTLR只处理PEG.所以你只有解析器规则,没有词法分析器规则.现在,你会如何丢弃空格?(你不能).
所以,你问的答案是:你不能,你必须在PEG中用空间规则乱丢你的语法:
add_expr
: Num Add Num
;
Add : '+';
Num : '0'..'9'+;
Space : ' '+ {skip();};
Run Code Online (Sandbox Code Playgroud)
add_expr
: num _ '+' _ num
;
num : '0'..'9'+;
_ : ' '*;
Run Code Online (Sandbox Code Playgroud)