2017-03-17 65 views
7

我有興趣編寫微語法。這是解析器不理解語言的完整語法的地方,只是其中的一部分;種酸「m4」。如何在perl6中編寫微語法?

這個想法是,解析器讀取字符並將它們寫入輸出,直到它在識別關鍵字時「醒來」,根據語法做一些處理,然後再次入睡。

我在構建一個時遇到了困難,而且在那裏似乎沒有任何實例。

回答

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; 

如果你跟蹤你在哪裏,你可以切換語法,再試一次當緩衝區獲取更多數據,等等。

除此之外,你還沒有提出你想要解決的具體問題。