可以通过rebol解析函数来创建完全解析css2/css3的规则吗?

Reb*_*ial 2 css html5 parsing computability rebol

rebol解析功能有限制吗?它是否能够解析整个css2/css 3规范,还是会遇到形成一些规则的理论上的不可能性?

在HostileFork回答之后更新:我的意思是在regexp中我认为这是不可能的,解析得更强大吗?

如果是,这是否意味着可以在与html5兼容的rebol vid中构建浏览器?

Hos*_*ork 8

你的"有限制"的问题很滑.我会试着给你" 答案",而不是仅仅"是的,当然" ......这将是虽然没有太多的教育更快捷.:)

请考虑以下代码段.它将解析器位置捕获到x,然后运行DO方言括号中的内容.x如果css-parser函数成功,该代码将重新设置为输入的尾部,如果函数失败,则重新设置为输入的头部.最后,它将解析位置设置为当前x.而且正如我们所知,只有当规则完成时我们处于输入系列的末尾时,PARSE才会返回true ...

parse my-css [x: (x: either css-parser x [tail x] [head x]]) :x]
Run Code Online (Sandbox Code Playgroud)

这是有效的解析方言代码当(且仅当)返回true css-parser函数成功.因此,如果你能在所有写在Rebol的一个CSS解析器,你可以写"在分析方言"吧.

(这导致有可能解决在Rebol的函数在给定的计算问题的问题.值得庆幸的是,计算机科学家们不必再回答,每一个新的语言弹出时间的问题,你可以计算出任何通过计算图灵机,并没有什么不可能......,并检查了阿兰·图灵自己的话说,通俗地说,CSS解析不准确停机问题,所以是的......是可以做到的.)

我会重新勾勒你的问题:

"是否可以编写一个规则块(不使用PAREN!,SET-WORD!或GET-WORD!构造),这些规则可以传递到PARSE函数并在任何有效的CSS文件上返回TRUE,在任何有效的CSS文件上返回FALSE畸形的一个?"

W3C推出了关于CSS的好坏的正式规范:

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*
  ;
Run Code Online (Sandbox Code Playgroud)

这导致我们问我们是否会原谅Rebol在我们通过带走PAREN来捆绑PARSE之后无法做出那种认可!/ GET-WORD!/ SET-WORD!(我只是想根据你的问题指出这类问题).

作为Rebol 3解析项目的一部分,有一篇关于Parse理论的文章 ......

PARSE方言是自上而下解析语言(TDPL系列)系列的增强成员,包括自顶向下解析语言(TDPL),广义自上而下解析语言(GTDPL)和解析表达式语法(PEG)和使用与该系列的其他成员相同的"有序选择"解析方法.

正如上面的链接所指出的那样,作为这个类的成员,Rebol的PARSE比正则表达式和LL解析器更加强大.我认为它比LL(k)和LL*解析器更强大,但它已经有一段时间了,因为我研究了这些东西,我不打赌我的生活.:)

你真的不需要理解所有这些意味着什么,以便利用它来回答你的"可以做到"的问题.由于人们声称ANTLR 解析CSS,而ANTLR是LL*解析器,那么我会说Rebol可以做到.PAREN!如果你碰到一堵墙就会让你做"任何事情",但这是一个很滑的斜坡,开始使用它太粗心了.