ces*_*sar 9 compiler-theory jflex
对于我们的编译器理论类,我们的任务是为我们自己设计的编程语言创建一个简单的解释器.我使用jflex和杯子作为我的发生器,但我有点卡在一个词法错误.另外,我建议使用jflex的状态功能吗?它感觉不对,因为看起来解析器更适合处理这个方面.你推荐使用其他工具来创建语言吗?我很抱歉,如果我不耐烦,但它应该在周二到期.
Gia*_*ian 14
词法错误是词法分析器可以拒绝的任何输入.这通常是因为令牌识别从您定义的规则的末尾开始.例如(没有特定的语法):
[0-9]+ ===> NUMBER token
[a-zA-Z] ===> LETTERS token
anything else ===> error!
Run Code Online (Sandbox Code Playgroud)
如果您将词法分析器视为接受有效输入字符串的有限状态机,则错误将是任何不会导致该有限状态机达到接受状态的输入字符串.
你的其余部分对我来说还不太清楚.如果您已经使用了一些工具,那么也许您最好学习如何使用这些工具实现您想要实现的目标(我对您提到的任何一种工具都没有经验).
编辑:重新阅读你的问题,我可以回答第二部分.语言可能没有词汇错误 - 它是任何输入字符串都是有效输入的语言.
词法错误可能是语言无效或不可接受的字符,例如“@”,它在 Java 中被作为标识符的词法错误而被拒绝(它是保留的)。
词法错误是词法分析器无法继续时抛出的错误。这意味着词法分析器无法将词位识别为有效标记。另一方面,当给定的一组已识别的有效标记与语法规则的任何右侧都不匹配时,扫描器将抛出语法错误。
感觉不对,因为解析器似乎更适合处理该方面
不。这似乎是因为上下文无关语言包括常规语言(这意味着解析器可以完成词法分析器的工作)。但考虑到解析器是一个堆栈自动机,您将使用额外的计算机资源(堆栈)来识别不需要堆栈来识别的内容(正则表达式)。这将是一个次优的解决方案。
注意:通过正则表达式,我的意思是...乔姆斯基层次结构意义上的正则表达式,而不是类java.util.regex.*。