Compiler construction dfa/nfa如何识别标识符和关键字之间的差异?

Compiler construction dfa/nfa如何识别标识符和关键字之间的差异?,compiler-construction,Compiler Construction,在制作自动机时,是否应该考虑标识符和关键字的差异 我可以做一个通用的自动机,当自动机接受字符串时,我会让它检查关键字表,检查它是标识符还是关键字,但我不确定这是正确的还是最好的方法 -更新- 我应该为具有以下词素的语言制作一个词法分析器: 整数、标识符、关键字('if','then','else','while')谓词(“==”,“您的方法听起来不错:首先从关键字表中进行检查,如果它与其中一个关键字匹配,则它是一个关键字。如果不匹配,则它是一个标识符。您可以通过以下两种方式来实现:要么为每个关键

在制作自动机时,是否应该考虑标识符和关键字的差异

我可以做一个通用的自动机,当自动机接受字符串时,我会让它检查关键字表,检查它是标识符还是关键字,但我不确定这是正确的还是最好的方法

-更新-

我应该为具有以下词素的语言制作一个词法分析器:
整数、标识符、关键字('if','then','else','while')谓词(“==”,“您的方法听起来不错:首先从关键字表中进行检查,如果它与其中一个关键字匹配,则它是一个关键字。如果不匹配,则它是一个标识符。

您可以通过以下两种方式来实现:要么为每个关键字设置一个规则,为标识符设置一个catchall,要么仅为标识符设置一个规则,并为标识符设置一个查询表,以便在输入标识符时查询关键字fier规则触发。第一种方法更快,但需要更大的DFA/NFA表。

对于SO来说,这可能有点太笼统了-试着问一下这个问题。@GoBusto如果这最终会成为离题,那么它可能更适合计算机科学(测试版)堆栈交换-您的问题非常抽象且不清楚。您指的是什么语言?您是手动创建自动机还是使用解析器生成器?顺便说一句:对于一些不能将关键字用作标识符的传统语言(同时)我已经看到在和中使用关键字查找表解决了这一区别。您可以查看我在和中考虑的标记器类型。但是对于您的作业,您可能需要使用自动机解决几乎所有问题,因此您可能需要在没有任何非自动机的情况下直接识别不同的关键字内容,甚至可能没有使用任何语法分析器生成器。但是你的问题仍然很不清楚。你能编辑问题并发布你得到的语法吗?@xmojmr很抱歉不清楚,只是我不确定我是否正确理解了概念。语言真的很简单,只有四个关键字“如果,然后,否则,和虽然”。但我仍然看不出如何创建区分标识符和这些关键字的自动机,而不让它看起来像意大利面条。我现在将编辑这个问题。