CSS2::Grammar 0.00 (作りかけ)

バリデータを作ろうと思い立って作り始めたピュア Perl な CSS2 の構文解析部の、作りかけ(αバージョン)ではありますが、ソースを晒してみます。この版は、構文ツリーを作らず、コールバックも呼び出さないので、まだ実用性はありません。エラーが出なければ構文上の誤りがないことがわかるというぐらいのものです。perl ライセンスです。
https://tociyuki.sakura.ne.jp/archive/css2-grammar.pm
これは、W3CAppendix D: The grammar of CSS2D.1 Grammar をそのまま再帰下降構文解析部にし、D.2 Lexical scanner を字句解析部にしたものです。

The grammar of CSS2 との違い

  1. Grammar は一部の production を一つにまとめたのを除くと同一です。
  2. Lexical scanner は、単位付きの数値を種類ごとに別々のシンボルにしていますが、煩雑なので、NUMBER シンボルにまとめました。
  3. UNICODERANGE をまともに正規表現で記述すると大変なので、手抜きしました。

未実装の機能

  1. 誤り検出後に字句を読み飛ばす機能をまだ実装していません。一箇所でも構文エラーを検出すると、die を実行し解析を終了します。仕様書によるとその場合は当該ルールセットを無視して、解析を継続するようにということですので、作らないといけないみたいです。
  2. コンテキスト・オブジェクトを受理しますが、まだコールバックの呼び出し機能を実装していません。
  3. HTML用の意味解析部は、まだ未実装です。