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

标签 compiler-construction

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

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

-更新-

我应该为具有以下词位的语言制作一个词法分析器: 整数、标识符、关键字('if'、'then'、'else'、'while') 谓词('=='、'<'、'<=')、"="、"+"、"("、“)”、“;”、“}”。

我不需要解决方案只是我不确定我是否正确理解了这个概念..可能我没有..但我尝试研究了一下但仍然不明白。

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

如果我要逻辑地解决这个问题,我会让我的自动机对每个不同的词位具有接受状态,然后在实现中我会检查它结束于哪个接受状态,这是应该如何完成的?或者通常使用完全不同的逻辑?

如果上述假设正确,那么我的问题就来了,我将如何区分标识符和关键字?我在自动机里做吗?还是在实现时?

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

最佳答案

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

关于compiler-construction - dfa/nfa 如何识别标识符和关键字之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26864261/

相关文章:

c++ - 将值从 flex 传递给 bison

compiler-construction - 如何在上下文无关文法中判断运算符的优先级

c# - 返回值的编译方法调用如何?

C++ 库兼容性

多个泛型类型的 Java 编译器错误

c - 为什么在 C 中将编译和链接过程分开很重要?

programming-languages - 如果用解释语言编写的程序从未翻译成机器语言,它们如何执行?

c - n = 0 和 n = n - n 之间的区别

c#在线编译执行安全问题

c++ - 如何修复此警告 : conversion to 'unsigned char' from 'int' may alter its value