Jintrick.netagenda2004年06月アーカイブ → 2004年06月18日

PLYについて

PLY (Python Lex-Yacc)

PLYを利用すれば構文規則を簡単に追加できそう。電卓の例は分かったけれど、規則が少し複雑になるととても難しくなる。

Text Processing in Python (a book)のchapter 4のPLYを扱った節は分かり易かった。

何度も読み返していると鬱陶しいのでガシガシ訳した。

で、クリップボード用HTMLの文法もPLYで書いてみた。いや書こうとしている(CbHtmlInlineParser.py)。

PLYで使える Context Free Grammar というやつは、EBNF風に書こうとすると全然駄目。括弧でグループ化してもエラー、トークンにプラス記号やアスタリスクをつけてもエラー。トークンを列挙するくらいしかできない。PLY以外のパージングツールに切り替える選択肢もあるようだけれど、A Python Parser for the RELAX NG Compact Syntaxを自分で調整するのも目的の一つだから、取り敢えずできるところまで足掻いてみるとしよう。

def p_empty(p):
    """empty : """
    pass

def p_attribute(p):
    """attribute : empty
                 | attribute attribute"""
    pass

これかフリーズの原因は。empty規則の連結で無限地獄。

これで見通しが立った。できる。でもこうなると一気に興味が失せてくるのが辛いところ。

補足トリビアといたしましては、t_のtはtokenのt、p_のpはproductionのpでございます。というか今日(2004-06-23)のトリビアの泉はずば抜けて面白かったな。まいふぇいばりっとトリビアはどう考えてもミジンコだろうが。

漸く書き終えんぬ(/2004/06/26/CbHtmlInlineParser.py)。ただしPLYはUnicodeに対応していないので、lex.pyに手を加えなければならなかった。するとディストリビューションにlex.pyを加えなければならず、するとLGPLライセンスで公開せねばならず、すると面倒くさいし胡散臭い。というわけで作者氏にバージョンアップを依頼中。期待薄。


webmaster@jintrick.net
公開: 2004年06月18日
カテゴリ: HTML ,Python