.someDiv { width:100%; height:100%; ... more properties ... }
上記の文字列と一致するパーサーのルールはどのようにして作成しますか?CSS階層のレキシングとパース
ルールでは無制限にプロパティを定義することができないので、私にとってはむしろ不可能に思えますか?誰かが明確にしてください、FsLex
とFsYacc
であなたはそのようなことをやりますか?
.someDiv { width:100%; height:100%; ... more properties ... }
上記の文字列と一致するパーサーのルールはどのようにして作成しますか?CSS階層のレキシングとパース
ルールでは無制限にプロパティを定義することができないので、私にとってはむしろ不可能に思えますか?誰かが明確にしてください、FsLex
とFsYacc
であなたはそのようなことをやりますか?
FsLexとFsYaccを使用している場合は、{ ... }
のプロパティをプロパティのリストとして解析できます。あなたが適切にすべての特殊文字を認識し、レクサーを持っていて、個々のプロパティを解析し、ルールを持っていると仮定すると、あなたのような何かを書くことができます。
declaration:
| navigators LCURLY propertyList RCURLY { Declaration($1, $3) }
| navigators LCURLY RCURLY { Declaration($1, []) }
propertyList:
| property SEMICOLON propertyList { $1::$2 }
| property { [$1] }
property:
| IDENTIFIER COLON values { Property($1, $3) }
declaration
ルールが全体の宣言を解析する(あなたはパーサを書く必要がありますdiv.foo #id
などCSSで使用できるさまざまなナビゲータ用)propertyList
ルールは1つのプロパティを解析し、複数のプロパティを解析するために再帰的に呼び出します。
右側に作成された値は、個々のプロパティを表す値のリストになります。 property
ルールは、個々のプロパティの割り当てを解析します。 width:100%
(ただし、リストやより強力な式にすることができるため、値の解析を終了する必要があります)。
http://www.pastie.org/2144473にリファクタリングできませんでしたか?あるいは、FsYaccは実際には異なる意味を|ここのオリジナルのyaccよりも? –
@Zor遅れて申し訳ありませんが、質問に対する回答は「はい」と「いいえ」です。それはうまくいくはずです。 –
難易度はどこですか?解析例が必要な場合は、ocamlyaccチュートリアルをご覧ください。問題がプロパティの数である場合は、プロパティを辞書に入れます。 fsyaccでは、コロンの前にある単語と一致します。 – Laurent