首页 > 编程知识 正文

编译原理实验一 词法分析,词法分析器编译原理

时间:2023-05-03 19:30:43 阅读:156350 作者:194

词法分析)。

词法分析器在英语中一般称为Tokenizer。

有一种称为有限自动机(Finite-state Automaton,FSA )或有限状态自动机(Finite-state Machine,FSM )的计算模型。

状态机可以区分标识符和数字字面的量

正则表达式也可以用于描述词法规则。 这种描述方法我们称为正则语法(Regular Grammar )。

IntLiteral : [0-9]; //至少有一个数字

Id : [A-Za-z][A-Za-z0-9]*; //以字母开头,后面可以是字符或数字

词法分析器使用许多词法规则,每个词法规则采用“Token类型:正则表达式”的形式来匹配一个Token

词法规则中必须有优先顺序。 例如,上位字句规则的优先顺序更高

手写词法分析器的步骤太麻烦了。 只要写词法规则,就能自动生成对应的有限自动机吗? 当然可以。 实际上,正则表达式工具就是这样做的。 另外,词法分析器生成工具lex (以及GNU版本的flex ),也可以根据规则自动生成词法分析器。 具体的想法是,将一个正则表达式翻译成NFA,将NFA转换成DFA。

DFA,这是“Deterministic Finite Automaton”的缩写,是确定的有限自动机。 其特点是该状态机在任何状态下,都能根据输入的文字,实现确定的状态转移。

NFA,这是“nondeterministicfiniteautomaton”的缩写,是不确定的有限自动机。 其特点是该状态机存在某种状态,对某些输入不能进行确定性的转换。

NFA,这又细分为两种情况。 对于一个输入,可以转换两种状态。 如果存在-转换器,即,没有字符输入,那么NFA还可从一个状态转变到另一个状态。

所有正则表达式都可以转换为NFA或DFA; 所有NFA或DFA也可以转换为正则表达式。

识别s*的NFA

也可以基于NFA,实现词法分析器。 但是,算法与基于DFA的算法不同。 如果状态中存在多个转换路径,请首先尝试其中的一个。 如果不匹配,则回来并尝试其他路径。 这种试探不顺利而返回的过程称为回溯跟踪。

分析int关键字、标识符和数字字面量的过程:

虽然NFA的执行可能会导致大量的回溯,但是能否将NFA转换成DFA的算法是子集构建方法。

如果有正确的正则表达式,就可以根据算法自动生成匹配字符串的程序。 这是正则表达式工具的基本原理,也是ANTLR和flex等部分工具可以自动生成词法分析器的原理。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。