lex与yacc程序学习(1)——词法分析器&lex工作过程

本文深入探讨了Lex源程序的结构,包括辅助定义和识别规则两大部分。详细讲解了如何使用正规式定义语法单位,如字母和数字,并介绍了识别规则如何对应程序员单词的识别,如关键字和标识符的识别过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(图 cr:王挺-国防科学技术大学-计算机学院 计算机科学与技术系 )

lex源程序分为辅助定义(AUXILIARY DEFINITION)识别规则(RECOGNITION RULES)两个部分。

辅助定义(AUXILIARY DEFINITION):用文法的形式定义一些语法单位。

把字母定义为letter,0~9定义为digit:

AUXILIARY DEFINITION
    letter->A|B|…|Z 
    digit->0|1|…|9

 这些AB既可以看成是字符、也可以是字、还可以是正规式。

这是最基本的正规式。

识别规则(RECOGNITION RULES):对应程序员单词的识别规则。

正规式+正规式所对应的单词的种别编码+自身的值,

RECOGNITION RULES
1    DIM                     {RETURN(1,-)}
2    IF                      {RETURN(2,-)}
3    DO                      {RETURN(3,-)}
4    STOP                    {RETURN(4,-)}
5    END                     {RETURN(5,-)}
6    letter(letter|digit)*   {RETURN(6,TOKEN)}
7    digit(digit)*           {RETURN(7,DTB)}
8    =                       {RETURN(8,-)}
9    +                       {RETURN(9,-)}
10   *                       {RETURN(10,-)}
11   **                      {RETURN(11,-)}
12   ,                       {RETURN(12,-)}
13   (                       {RETURN(13,-)}
14   )                       {RETURN(14,-)}

letter(letter|digit) :这条正规式识别的是以字母开头的字母数字串。

TOKEN:代表单词自身的字符串。

:识别标识符。

 digit(digit)* :识别数字串。

DTB:子程序。

:调用DTB子程序,将数字串转变为二进制常数。

每一条规则都是正规式,正规式所对应的单词的种别编码都写在对应的后面,用括号括起来。

lex程序核心:正规式+所对应的动作

LEX的工作过程:

    首先,对每条识别规则Pi 构造一个相应的非确定有限自动机Mi ;

    然后,引进一个新初态X,通过ε弧,将这些自动机连接成一个新的NFA;

    最后,把M确定化、最小化,生成该DFA的状态转换表和控制执行程序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值