|
9
|
| Erik van Brakel scottrakes · 技术社区 · 16 年前 |
|
|
1
8
然后,在解析器规则中,您可以这样做:
这允许您在语法上指定差异,大致可以用上下文来描述,而在词汇上,大致可以通过外观来描述。如果某物的含义因位置而异,那么这种差异应该在语法中指定,而不是在词法中指定。 请注意,颜色和选择器的定义完全相同。词法分析器通常是将输入字符串转换为语法的模块的一个单独阶段,因此使用模糊的词典是无效的(正如所指出的,bbb可以是十六进制,也可以是小写字母字符串)。因此,数据有效性检查需要在其他地方进行。 |
|
|
2
2
正如沃尔特所说,
Appendix G. Grammar of CSS 2.1
对莱克斯说
词法分析器定义了以下标记。..
…语法包括以下规则。..
这意味着基于语法的解析器将允许非十六进制hexcolor。 稍后,我会在分析/解释词法分析+解析语法树的代码中检测到非十六进制hexcolor。 |
|
|
3
0
为了从多个备选方案中做出决定,ANTLR有两个选择,
这是来自antlr语法库(css2.1 g): simpleSelector
: elementName
((esPred)=>elementSubsequent)*
| ((esPred)=>elementSubsequent)+
;
esPred
: HASH | DOT | LBRACKET | COLON
;
elementSubsequent
: HASH
| cssClass
| attrib
| pseudo
;
cssClass
: DOT IDENT
;
elementName
: IDENT
| STAR
;
这用于句法谓词。 |