cssパーサ(メモ)
参考:各ブラウザのCSSパーサの実装方法 - katata_hの日記
PHPで扱えるkmyacc(yacc)
- 本家:kmyacc - 多言語対応LALRパーサー生成系
- yaccと互換性のあるパーサージェネレータ
- 処理と出力が分離されていて、他の言語への対応が可能
- kmyacc に各種パッチを当てまくったバージョンを fork しました - muddy brown thang
- ダウンロード -> 解凍 -> make -> make install -> kmyacc -d file.phpy(下記の CSSGrammar.y をコピー)
構文規則は、webkitのものが利用できます。
- WebKit – /trunk/WebCore/css/CSSGrammar.y
- WebKit は、yaccの上位互換のbisonを使っている模様。http://trac.webkit.org/browser/trunk/WebCore/css/makegrammar.pl
- あとは、ひたすらPHPへ移植
lexの方は自力でも作れるらしい。
作るなら、Webkitものを利用して、
http://trac.webkit.org/browser/trunk/WebCore/css/tokenizer.flex
を使ってflexで生成したものを移植 OR JavaScriptのを移植 WebKit の CSS の字句解析部分を JavaScript に移植しました - IT戦記
=> PHPのみで完結させるのは比較的難しい
(移植の単純作業に耐えられれば楽。またcだけなら簡単。しかし、それだと面白みがない)
PHP_LexerGeneratorとPHP_ParserGenerator
- PHP_LexerGenerator
- PHP_ParserGenerator
- lemonパーサという、bison や yacc の同種のパーサジェネレータをPHPに移植したもの
- 但し、bison や yacc と記法は異なる。
- 参考:PHP_LexerGeneratorとPHP_ParserGeneratorを利用して PHPで独自の言語を実装する方法(1/4):CodeZine
- とにかく資料が少なく理解するのが大変そう。
- smarty3が参考になるかも。http://smarty-php.googlecode.com/svn/branches/Smarty3Dev/development/lexer/
=> PHPのみで完結するが、lemonパーサというものを覚えないといけない