rebol解析函数能否创建用于完全解析css2/css3的规则?
rebol解析函数的功能是否有限制?它是否能够解析整个css2/CSS3规范,或者在理论上无法形成一些规则 在HostileFork之后更新答案:我的意思是在regexp中,我认为这是不可能的,解析功能更强大吗rebol解析函数能否创建用于完全解析css2/css3的规则?,css,parsing,html,rebol,computability,Css,Parsing,Html,Rebol,Computability,rebol解析函数的功能是否有限制?它是否能够解析整个css2/CSS3规范,或者在理论上无法形成一些规则 在HostileFork之后更新答案:我的意思是在regexp中,我认为这是不可能的,解析功能更强大吗 如果是,这是否意味着可以在rebol vid中构建与html5兼容的浏览器?应该完全能够解析规范,如果您有动机和耐心编写规则的话。这比JSON解析器要复杂一点,但想法是一样的。你的“是否存在限制”问题很难回答。我会试着给你“答案”,而不是仅仅“是的,当然”……这会更方便,尽管不会太有教育
如果是,这是否意味着可以在rebol vid中构建与html5兼容的浏览器?应该完全能够解析规范,如果您有动机和耐心编写规则的话。这比JSON解析器要复杂一点,但想法是一样的。你的“是否存在限制”问题很难回答。我会试着给你“答案”,而不是仅仅“是的,当然”……这会更方便,尽管不会太有教育意义。:) 考虑以下代码段。它将解析器的位置捕获到
x
,然后运行DO方言中括号中的内容。如果css解析器
函数成功,则该代码将x
重新设置为输入的尾部;如果函数失败,则将x
重新设置为输入的头部。最后,它将解析位置设置为当前x
。正如我们所知,只有当规则完成时,我们在输入序列的末尾,PARSE才会返回true
parse my-css [x: (x: either css-parser x [tail x] [head x]]) :x]
这是有效的parse方言代码,并且只有当css解析器
函数成功时才会返回true。因此,如果您可以用Rebol编写css解析器,那么您可以“用解析方言”编写它
(这就引出了一个问题:用Rebol函数来解决给定的计算问题是可能的。谢天谢地,计算机科学家不必在每次出现新语言时都重新回答这个问题。你可以计算图灵机器计算的任何东西,也可以计算任何不能计算的东西……用外行的话说,检查一下。CSS解析是这不完全是停顿的问题,所以是的……这是可以做到的。)
我将尝试重新构思你的问题:
是否可以编写一个规则块(不使用PAREN!、SET-WORD!或GET-WORD!构造),将其传递到PARSE函数中,并在任何有效CSS文件上返回TRUE,在任何格式错误的CSS文件上返回FALSE
W3C提出了关于CSS好坏的正式规范:
但请注意,即使在那里,也不完全是干巴巴的。他们对颜色常数的“正式”规范不能排除#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的手之后,无法进行这种识别
作为REBOL3解析项目的一部分,有一篇关于
解析方言是自顶向下解析语言家族(TDPL家族)的增强成员,包括自顶向下解析语言(TDPL)、广义自顶向下解析语言(GTDPL)和解析表达式语法(PEG),并使用与该家族其他成员相同的“有序选择”解析方法
正如上面的链接所指出的,作为这个类的一员,Rebol的解析严格来说比正则表达式和正则表达式都更强大。我认为它也比LL(k)和LL*解析器更强大,但我已经有一段时间没有研究过这个东西了,我不会把我的生命押在它上面。:)
你不需要真正理解这一切意味着什么,就可以利用它来回答你的“可以做到”的问题。既然人们使用了,而且ANTLR是一个LL*解析器,那么我认为Rebol可以做到这一点。帕伦!如果你撞到了墙,你就可以做“任何事”,但如果你太不小心使用它,那就太危险了。我的问题是含蓄地解析vs正则表达式。我认为正则表达式做不到这一点。魔鬼在于细节:parse能够处理可选属性吗?我记得我在解析html的时候非常头疼。如果我相信你的话,没有什么能阻止我在rebol视图中使用HTML5浏览器。我错了吗?;)Rebol的大部分愿景是“反叛”现有庞大的网络和标准的演变。类似地,Douglas Crockford将JSON作为XML的竞争对手,并指出Rebol是他的灵感来源。因此,虽然没有技术上的原因可以解释为什么你不能在Rebol中构建HTML5浏览器,但这并不是一个重点…他们的愿景是浏览Rebol文档,而不是HTML5文档。这就像HTML/CSS是Rebol世界中的“遗留”格式,在业余时间可以使用。这是该计划的一部分好处,也是它的一部分疯狂之处!您可以使用
parse
解析颜色语法,无需位置重置。您可以执行回溯,或者将解析分为两部分。parse
方言本身就非常强大。