![]() |
1
14
词法错误是lexer可以拒绝的任何输入。这通常是由于令牌识别偏离了您定义的规则的末尾。例如(无特定语法):
如果您将lexer视为接受有效输入字符串的有限状态机,那么错误将是不会导致该有限状态机达到接受状态的任何输入字符串。 你剩下的问题我不太清楚。如果您已经使用了一些工具,那么您最好学习如何使用这些工具实现您想要实现的目标(我对您提到的任何一种工具都没有经验)。 编辑:重读你的问题后,我可以回答第二部分。一种语言可能没有词汇错误——它是任何输入字符串都是有效输入的语言。 |
![]() |
2
3
词汇错误可能是语言无效或不可接受的字符,如“@”,它作为Java中标识符的词汇错误而被拒绝(它被保留)。 词法错误是词法分析器在无法继续时引发的错误。这意味着没有办法识别 词位 作为有效 令牌 对你来说。另一方面,当一组给定的 已经 已识别的有效标记与语法规则的任何右侧都不匹配。
不,不。 似乎 因为 context-free languages include regular languages (意思是解析器无法完成lexer的工作)。但考虑到解析器是一个堆栈自动机,您将使用额外的计算机资源(堆栈)来识别不需要识别堆栈的东西(正则表达式)。这将是一个次优的解决方案。
注:用正则表达式,我的意思是…Chomsky层次结构意义上的正则表达式,而不是
|
![]() |
3
2
词汇错误是指输入不属于以下任何列表:
关键词:
示例:9var:error,number before characters,not a variable and not a key word either. 美元:错误 我不知道的是像一个以上的符号一样的东西是否被接受,比如“+-” |
![]() |
4
0
当编译器包含语法时,它会捕获错误! 它将取决于编译器本身是否具有捕获词法错误的能力(范围)。 如果在编译器的开发过程中决定了什么类型的词汇错误以及如何(根据语法)处理它们。 通常所有著名和常用的编译器都具有这种功能。 |