2016-10-07 1 views
1
class A(List): 
    grammar = [(Symbol, ':', Symbol), Symbol] 

compose(parse('a', A)) 

構文解析中にcomposeエラーが発生します。pypegはリストで文法を構成できませんか?

私はダミークラスを使用して、それを回避することができます

class B(List): 
    grammar = Symbol, ':', Symbol 
class A2(List): 
    grammar = [B, Symbol] 

compose(parse('a', A2)) 

今では正しく構成しています。

ここで何が間違っていますか?

答えて

1

pyPEGにバグが見つかりました。

Listオブジェクトを構成するとき、pyPEGはスタックを使用して、次にどの項目を作成するかを追跡します。文法のタプルはスタックから項目を削除しますが、タプルが一致しなくてもそれらを戻すことはありません。コードが空のスタックの要素にアクセスしようとすると、IndexErrorが発生します。

Stack     Grammar      Action     
----------------------------------------------------------------------- 
[Symbol('a')] [(Symbol, ':', Symbol), Symbol] matched, pop stack 
        ^^^^^^ 

[]    [(Symbol, ':', Symbol), Symbol] str, append to text 
          ^^^ 

[]    [(Symbol, ':', Symbol), Symbol] no match 
           ^^^^^^ 

[]    [(Symbol, ':', Symbol), Symbol] IndexError! 
             ^^^^^^ 

私は修正してpull request提出しました:あなたたとえば

が、それは次のようになります。

関連する問題