Rebol Parse機能は、CSS2 / CSS3を完全に解析するためのルールを作成できますか?

StackOverflow https://stackoverflow.com/questions/3484854

質問

機能パワーを解消するための制限はありますか? CSS2 / CSS 3仕様全体を解析することができるのでしょうか、それともいくつかのルールを形成することは理論的に不可能であるでしょうか?

敵対的な回答の後に更新:私はregexpでは、それはかなり不可能だと思います、解析ははるかに強力ですか?

はいの場合、それはHTML5と互換性のあるRebol VIDでブラウザを構築することが可能だということですか?

役に立ちましたか?

解決

「制限はありますか」というあなたの質問は滑りやすいです。私はあなたに試してみます」 「ええ、確かに」の代わりに「」と答えます...それは教育的すぎないにもかかわらずより適切です。:)

次のスニペットを検討してください。パーサーの位置をキャプチャします x, 、そして、do方言で括弧内のものを実行します。そのコードが再セットされます x 入力の尾に css-parser 関数が成功するか、関数が故障した場合に入力のヘッドに成功します。最後に、それは電流に解析位置を設定します x. 。そして、私たちが知っているように、Parseは、ルールが終了したときに入力シリーズの終わりにいる場合にのみTRUEを返します...

parse my-css [x: (x: either css-parser x [tail x] [head x]]) :x]

これは有効な解析方言コードです それは真実である場合(および場合にのみ)返します css-parser 機能は成功します。したがって、RebolでCSSパーサーを書くことができれば、「解析方言」で書くことができます。

(これは、LEBOL関数で特定のコンピューティングの問題を解決することが可能であるという問題につながります。ありがたいことに、コンピューターの科学者は新しい言語がポップアップするたびにその質問を再入力する必要はありません。チューリングマシン、そしてできないものは何もありません...そしてチェックアウト アランチューリング自身の言葉, 、素人の言葉で。 CSSの解析はまさに停止の問題ではないので、そうです...それはできます。)

私はあなたの質問を再編成することに突き刺します:

「パレン機能に渡すことができるルール(Paren!、set-word!、またはget-word!constructsを使用しないルールのブロックを書くことができますか?奇形のもの?」

良いまたは悪いCSSを作るものの正式な仕様は、W3Cによって公開されます。

http://www.w3.org/tr/css2/grammar.html

しかし、そこにさえ、それはすべてカットアンドドライではないことに注意してください。カラー定数の「正式な」仕様は除外できません #abcd, 、彼らはそれについてコメントで、英語で書かなければなりませんでした:

/*
 * There is a constraint on the color that it must
 * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F])
 * after the "#"; e.g., "#000" is OK, but "#abcd" is not.
 */
hexcolor
  : HASH S*
  ;

これにより、Paren!/get-word!/set-word!/get-word!/set-word! (私はあなたの質問に照らしてこの種の問題を指摘したいだけです)。

Rebol 3 Parseプロジェクトの一部として、 解析の理論...

パース方言は、トップダウン解析言語(TDPL)、一般化されたトップダウン解析言語(GTDPL)、解析式表現文法(PEG)、およびページ(TDPLファミリー)のファミリーの強化されたメンバーです。家族の他のメンバーと同じ「秩序化された選択」解析方法を使用します。

上記のリンクで指摘されているように、このクラスのメンバーであることは、Rebolの解析を通常の表現の両方よりも厳密に強力にします LLパーサー. 。 LL(K)やLL*パーサーよりも強力だと思いますが、このようなことを勉強してからしばらく経ちましたが、人生に賭けません。 :)

あなたは、それを利用してあなたの「それが行われることができますか」という質問に答えるために、それが何を意味するのかを本当に理解する必要はありません。人々から CSSを解析すると主張していますantlr, 、そしてantlrはll*パーサーです、そして私はRebolがそれをすることができると言うでしょう。パレン!あなたが壁にぶつかった場合に「何でも」をできるようにする穴のエースですが、それをあまりにも不注意に使用し始めるのは滑りやすい斜面です。

他のヒント

ルールを書く動機と忍耐がある場合は、仕様を完全に解析できる必要があります。たとえば、JSONパーサーよりも少し関与するでしょうが、同じアイデアになるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top