如何在perl6中编写微语法?

时间:2017-03-17 14:56:14

标签: parsing grammar perl6

我对编写微语法感兴趣。这是解析器不理解语言的完整语法的地方,只是语言的一部分;有点“m4对酸”。

这个想法是解析器读入字符并将它们写入输出,直到它在识别关键字时“醒来”,根据语法进行一些处理,然后再次入睡。

我在构建一个时遇到了麻烦,而且似乎没有任何例子。

1 个答案:

答案 0 :(得分:7)

您可能正在寻找.subparse方法。它锚定在数据的开头并尽可能多地匹配。您可以使用:c副词告诉它从哪里开始,然后查看Match对象以查看它停止的位置

 my $position = 0;

 my $match = Some::Grammar.subparse( $data, :c($position) );

 # update the position to the last thing your grammar consumed
 $position = $match.end if $match.so;

如果您跟踪自己的位置,可以切换语法,在缓冲区获取更多数据时再试一次,等等。

除此之外,您还没有提出您想要解决的具体问题。