我为一种简单的编程语言创建了词法分析器。现在我使用确定性有限自动机代替正则表达式(Java 中的 RegEx)。自动机工作得很好,但它不会报告错误,例如,如果我在源代码中有 moduleclouds(模块和云都是关键字)。相反,它将创建两个名为 KW_MODULE 和 KW_CLOUDS 的令牌。有人可能会争辩说,如果自动机处于 KW_MODULE 的最终状态,我可以提前寻找空白。但这并不能解决问题,因为在语言中我可以有类似 8-6 的东西(不被空格分隔),它可以正确地翻译成标记 INT DASH INT。
我知道在解析器的语法中处理空格不是一个好主意。
我的自动机实现为矩阵(行是状态,列是字母表中的字符,单元格是过渡状态)。当自动机进入最终状态时,我将自动机重置为从开始状态开始。
我认为问题在于这种编程语言不使用分号。例如:
模块; 云;
相反,它使用空白来分隔线条:模块云
提前致谢。
问候。