![]() |
1
4
lexer可以检测没有可能含义的字符序列(其中含义由解析器确定)。例如,在Java中,序列
但是,lexer无法检测到给定的词汇有效标记是无意义的或不符合语法的。例如,JavaListar会愉快地返回令牌序列。
|
![]() |
2
1
除了下面提到的情况外,大多数编译器还处理lexer中的注释。因此,也可以在此处检测到与注释相关的错误(嵌套不正确,未关闭)。 另一个问题是用户定义的数据类型,需要由lexer和解析器一起处理。请考虑以下代码: typedef int myinteger; MyTimeX; 在第二条语句中,myinteger是一种数据类型,lexer应该将myinteger作为数据类型返回,而不是作为标识符返回。这通常是通过交叉引用一个潜在的标识符来实现的,该标识符具有一个列表用户定义的数据类型,该数据类型以前由解析器填充过。 第三个问题涉及令牌的上下文。在像C++这样的上下文敏感语言中,相同的令牌(EG和LT)可以有不同的含义(小于模板参数的开始)。这也需要与解析器合作处理,解析器可以向lexer提供关于当前状态的反馈。 |
![]() |
3
0
我没有仔细检查语法,但我认为像“2cat”这样的字符串不是任何有效/预期/可分类的标记。 |
![]() |
Hakanai · 为什么这个Lucene查询没有返回命中率? 9 年前 |
![]() |
Shahtaj Khalid · 在文本文件中显示输出 9 年前 |
![]() |
myang · 如何在一个句子中列出所有表示动物的英语术语? 10 年前 |