解析関数のパワーを再構築することに制限はありますか?css2 / css 3仕様全体を解析できるのでしょうか、それともいくつかのルールを形成することが理論的に不可能になるのでしょうか。
HostileForkの回答後の更新:正規表現では、それはかなり不可能だと思いますが、解析ははるかに強力ですか?
はいの場合、html5と互換性のあるrebol vidでブラウザを構築できることを意味しますか?
解析関数のパワーを再構築することに制限はありますか?css2 / css 3仕様全体を解析できるのでしょうか、それともいくつかのルールを形成することが理論的に不可能になるのでしょうか。
HostileForkの回答後の更新:正規表現では、それはかなり不可能だと思いますが、解析ははるかに強力ですか?
はいの場合、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]
これは有効な解析方言コードであり、関数が成功した場合にのみtrueを返します。css-parser
したがって、Rebolでcssパーサーを作成できる場合は、「解析方言で」作成できます。
(これにより、Rebol関数で特定のコンピューティングの問題を解決できるという疑問が生じます。ありがたいことに、コンピューターサイエンティストは、新しい言語が出現するたびにその質問に再回答する必要はありません。チューリングのマシンであり、ありえないことは何もありません...そして、素人の言葉で、アラン・チューリング自身の言葉をチェックしてください。CSSの解析は、正確には停止の問題ではないので、そうです...それは可能です。)
私はあなたの質問を再構成することを突き刺します:
"PARSE関数に渡して有効なCSSファイルでTRUEを返し、奇形?」
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!を取り除いて、PARSEの手を結んだ後、そのような認識を行うことができなかったRebolを許すかどうかを尋ねることになります。(私はあなたの質問に照らしてこの種の問題を指摘したいだけです)。
Rebol 3解析プロジェクトの一環として、解析理論の記述があります...
PARSEダイアレクトは、トップダウン構文解析言語(TDPL)、一般化トップダウン構文解析言語(GTDPL)、および構文解析式文法(PEG)を含むトップダウン構文解析言語ファミリー(TDPLファミリー)の拡張メンバーです。ファミリーの他のメンバーと同じ「順序付き選択」解析方法を使用します。
上記のリンクで指摘されているように、このクラスのメンバーであると、RebolのPARSEは、正規表現とLLパーサーの両方よりも厳密に強力になります。LL(k)やLL *パーサーよりも強力だと思いますが、このようなものを研究してからしばらく経ち、人生に賭けることはありません。:)
それを利用して「できるか」という質問に答えるために、それが何を意味するのかを実際に理解する必要はありません。人々はCSSをANTLRで解析すると主張しており、ANTLRはLL *パーサーであるため、Rebolで解析できると思います。パレン!は、壁にぶつかった場合に「何でも」できるエースインザホールですが、不用意に使い始めるのは滑りやすい坂道です。
ルールを作成する動機と忍耐力があれば、仕様を完全に解析できる必要があります。たとえば、JSONパーサーよりも少し複雑になりますが、同じ考えになります。