Rebol Parse功能功率是否有限制?它是否能够解析整个CSS2 / CSS 3规格,还是遇到形成某些规则的理论上不可能的?

hostilefork之后的更新答案:我的意思是在Regexp中,我认为这是不可能的,解析功能更强大吗?

如果是,这意味着可以在与HTML5兼容的Rebol VID中构建浏览器吗?

有帮助吗?

解决方案

您的“有限限制”的问题是湿滑的。我会尝试给你” 回答“而不是“是的,确定”……尽管不太教育,这会更方便。:)

考虑以下片段。它捕获了解析器的位置 x, ,然后运行DO方言中的括号中的内容。该代码重新设置 x 到输入的尾巴 css-parser 功能成功,或者如果功能失败,则输入的头部。最后,它将解析位置设置为电流 x. 。正如我们所知,只有当规则完成时,我们才在输入系列的末尾返回true ...

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

那是有效的解析方言代码 当(仅当) css-parser 功能成功。因此,如果您可以在Rebol中编写CSS解析器,则可以在“解析方言”中写下它。

(这导致了一个问题,即可能在重建功能中解决给定的计算问题。幸运的是,计算机科学家每次弹出新语言都不必重新提出这个问题。您可以计算任何计算的内容图灵机,什么都不是... 艾伦·图灵(Alan Turing)自己的话, ,用外行的话。 CSS解析不是完全停止的问题,所以……可以做到。)

我将重新确定您的问题:

“是否可以编写一个可以传递到解析功能中并在任何有效的CSS文件上返回true的规则(不使用paren!,set-word!或get-word!constructs)的规则块畸形吗?”

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*
  ;

这导致我们问我们是否会原谅Rebol,因为我们通过夺走Paren!/Get-Word!/Set-Word将Parse的手绑住了!/set-word! (我只想根据您的问题指出这种问题)。

作为Rebol 3解析项目的一部分 解析理论...

解析方言是自上而下的解析语言家族(TDPL系列)的增强成员使用与家庭其他成员相同的“有序选择”解析方法。

正如上面链接中指出的那样,作为此类的成员,Rebol的解析比正则表达式和 LL解析器. 。我认为它也比LL(K)和LL*解析器更强大,但是自从我研究这些东西以来已经有一段时间了,我不会押注我的生活。 :)

您实际上不需要理解所有这些含义,以便使用它来回答您的“可以做到的”问题。自从人 声称要解析CSSantlr, ,而Antlr是一个解析器,然后我想说Rebol可以做到。帕伦!是一个井井有条的井井有条,如果您撞到墙壁,可以让您做“任何事情”,但这是一个湿滑的斜坡,可以开始过分地使用它。

其他提示

如果您有动机和耐心编写规则,应该完全能够解析规格。它比JSON解析器要多一些,但这是同一想法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top