簡體   English   中英

Grako左遞歸

[英]Grako left recursion

我正在嘗試使用grako來描述一個簡單的左遞歸語法,但是這樣做很難。

右遞歸確實可以正常工作:

symbol = /[a-z]/ ;
condition = symbol "AND" condition | symbol ;
start = condition $ ;

根據我發現的所有示例,應該以這種方式描述左遞歸:

symbol = /[a-z]/ ;
condition = condition "AND" symbol | symbol ;
start = condition $ ;

但是,它不適用於以下規則:

a AND b AND c

我收到此錯誤:

grako.exceptions.FailedParse: srecur(1:3) Expecting end of text. :
a AND b AND c
  ^
start

我現在了解到的是規則的第一個字符與symbol匹配,而不與condition "AND" symbol匹配,因此grako希望使用它。 但是我的開始規則要求所有角色都被消耗掉。

我嘗試使用許多變通方法,但是找不到合適的變通方法。

Grako實際上是PEG解析器。 這些解析器具有無法輕松處理左遞歸的隱含屬性。

更多細節在這里那里

對於我的需求,我已經可以使用以下表達式解決我的問題:

condition = symbol { "AND" symbol }* ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM