8
|
Erik van Brakel scottrakes · 技术社区 · 15 年前 |
![]() |
1
8
尝试将lexer文件中的从颜色移动到它自己的对象,例如:
然后,在解析器规则中,您可以这样做:
等。 这允许您在语法上指定差异,可以大致描述为上下文差异,而在词汇上可以大致描述为外观差异。如果某个东西的意思随它的位置而变化,那么应该在语法中指定这种差异,而不是在词法分析器中。 请注意,颜色和选择器的定义完全相同。lexer通常是与将输入字符串转换为语法的模块分开的一个阶段,因此具有不明确的词法是无效的(正如前面指出的,bbb可以是十六进制的,也可以是小写字母字符串)。因此,数据有效性检查需要在其他地方进行。 |
![]() |
2
2
和沃尔特说的一样,
Appendix G. Grammar of CSS 2.1
对莱克斯说
lexer定义了以下令牌…
…语法包括以下规则…
这意味着基于语法的解析器将允许非十六进制十六进制。 稍后,我将在代码中检测到一个非十六进制十六进制十六进制,它分析/解释lexed+解析的语法树。 |
![]() |
3
0
为了从多个备选方案中做出决定,ANTLR有两个选择:
这是来自antlr语法库(css2.1g): simpleSelector : elementName ((esPred)=>elementSubsequent)* | ((esPred)=>elementSubsequent)+ ; esPred : HASH | DOT | LBRACKET | COLON ; elementSubsequent : HASH | cssClass | attrib | pseudo ; cssClass : DOT IDENT ; elementName : IDENT | STAR ; 这用于句法谓词。 |
![]() |
paranoider · /ANTLR解析器规则中的s/s 7 年前 |
![]() |
tuk · Antlr分析规则,用于分析具有匹配大括号的字符串 7 年前 |
![]() |
Ritwik Bhar · Antlr-解析多行#为C.g4定义 7 年前 |