dfa/nfa如何识别标识符和关键字之间的区别



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

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

-更新-

我应该为一种语言做一个词法分析器,它有以下词法:整数,标识符,关键字('if','then','else','while')谓词('==','<','<='),"=","+","(",")",";","}"。

我不需要解决方案,只是我不确定我是否正确理解了这个概念。。也许我没有。。但我试着研究了一下,还是不明白。

第一个有限自动机只接受还是拒绝?那么,当使用它们时,我怎么知道它被接受为什么词位呢?它被接受为关键字了吗?标识符?等等

如果我从逻辑上解决这个问题,我会让我的自动机对每个不同的词位都有接受状态,然后在实现中,我会检查它以哪个接受状态结束,这应该是这样做的吗?还是通常使用完全不同的逻辑?

如果上面的假设是正确的,那么我的问题来了,我该如何区分标识符和关键字?我在自动机中做吗?还是在实施过程中?

如果我不清楚,忽略我的问题,我想我需要更多的研究,因为我没有道理。

您的方法听起来不错:首先从关键字表中进行检查,如果它与其中一个匹配,那么它就是一个关键字。如果不是,它就是一个标识符。

您可以采用任何一种方式:要么为每个关键字设置一个规则和一个标识符的catchall,要么只为标识符设置一条规则,并在触发标识符规则时查询关键字的查找表。第一种方法更快,但需要更大的DFA/NFA表。

最新更新