![]() |
1
9
一种方法是lexer在遇到第一个lexer时进入一个不同的内部状态
|
![]() |
2
6
最简单的方法可能是将注释作为一个标记来使用,也就是说,不要发出“START comment”标记,而是继续读取输入,直到可以发出一个包含整个注释的“comment BLOCK”标记
|
![]() |
3
3
在大多数语言中,这并不含糊:第一个斜杠和星号是 消耗 生成“多行注释开始”标记。它后面是一个斜杠,在注释中是纯“content”,最后两个字符是“多行注释结尾”标记。 由于使用了前2个字符,因此第一个asterix也不能用于生成注释结束标记。我注意到它可以产生第二个“评论开始”标记。。。哦,这可能是个问题,这取决于解析器可用的上下文数量。
这里我讲的是标记,假设解析器级别处理注释。但这同样适用于lexer,其基本规则是从
|
![]() |
4
0
使用regexp的算法,从字符串的开头搜索工作方式回到当前位置。
|
![]() |
5
0
解决这个问题的一个方法是让你的lexer返回:
对于大多数编程语言 ,因为/'和*'也可以用于乘法和其他类似的事情,这对于lexer来说太复杂了。雷克瑟真的应该回来了 . 如果令牌开始太依赖于上下文,那么您要寻找的很可能是一个更简单的令牌。
也就是说,CSS不是一种编程语言,所以/'和*'不能重载。真的很抱歉,除了评论,它们不能用于其他任何东西。所以我很想把整件事作为一个评论标记传递出去,除非你有充分的理由不这样做:
|
![]() |
6
0
因为CSS不支持嵌套的注释,所以您的示例通常会解析为单个标记,
|
![]() |
Toru · Oracle文本包含和技术内容 7 年前 |
![]() |
Patrick Collins · 如何对Alex代码进行单元测试? 9 年前 |
|
user2408664 · 词汇和语法错误 11 年前 |