Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rebol解析函数能否创建用于完全解析css2/css3的规则?_Css_Parsing_Html_Rebol_Computability - Fatal编程技术网

rebol解析函数能否创建用于完全解析css2/css3的规则?

rebol解析函数能否创建用于完全解析css2/css3的规则?,css,parsing,html,rebol,computability,Css,Parsing,Html,Rebol,Computability,rebol解析函数的功能是否有限制?它是否能够解析整个css2/CSS3规范,或者在理论上无法形成一些规则 在HostileFork之后更新答案:我的意思是在regexp中,我认为这是不可能的,解析功能更强大吗 如果是,这是否意味着可以在rebol vid中构建与html5兼容的浏览器?应该完全能够解析规范,如果您有动机和耐心编写规则的话。这比JSON解析器要复杂一点,但想法是一样的。你的“是否存在限制”问题很难回答。我会试着给你“答案”,而不是仅仅“是的,当然”……这会更方便,尽管不会太有教育

rebol解析函数的功能是否有限制?它是否能够解析整个css2/CSS3规范,或者在理论上无法形成一些规则

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


如果是,这是否意味着可以在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
方言本身就非常强大。