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

时间:2014-11-11 11:52:16

标签: compiler-construction

制作自动机时,我应该考虑标识符和关键字的区别吗?

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

-Update -

我应该为具有以下词汇的语言制作词法分析器: 整数,标识符,关键字('if','then','else','while')谓词('==','<','< =')," =" ," +","(",")",&#34 ;;","}"

我不需要解决方案只是因为我不确定我是否理解这个概念..可能我不会......但是我尝试了一点研究,但我仍然没有。理解。

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

如果我在逻辑上解决这个问题,我会让我的自动机为每个不同的lexeme接受状态,然后在实现中我将检查它结束的接受状态,这是应该如何完成的?或者通常使用完全不同的逻辑?

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以采用以下两种方式执行此操作:每个关键字都有一个规则,标识符包含一个标记,或者只是标识符规则和标识符规则触发时您查阅的关键字查找表。第一种方法更快,但需要更大的DFA / NFA表。