利用Python实现词法分析器(实验报告)

本文是一篇关于使用Python实现词法分析器的实验报告,旨在理解和掌握词法分析的原理,实现词法分析程序,识别单词,删除无用字符和注释。报告详细介绍了实验步骤,包括选定语言、设计文法、创建单词种别表,并展示了测试结果。
摘要由CSDN通过智能技术生成

实验一 词法分析器的设计

一、实验目的

理解并掌握词法分析的原理与方法,能够使用某种语言实现词法分析程序。

二、实验要求

选用某种语言(如 C/C++)实现词法分析程序。词法分析程序的主要任务如下:

1. 识别出输入的源程序中的单词,输出二元组形式的单词序列。

2. 删除无用的空白字符、回车符等没有实质意义的字符。

3. 删除注释。

三、实验步骤

1. 选定进行词法分析的高级程序设计语言,给出该语言的文法。

<程序>::=<分程序>.

<分程序> ::=[<常量说明>][<变量说明>][<过程说明>]<语句>

<常量说明> ::=<常量定义>;

<常量定义> ::=<标识符>=<无符号整数>

<无符号整数> ::= <数字>{<数字>}

<变量说明> ::=<变量定义> <标识符>;

<变量定义> ::=char | string

<标识符> ::=<字母>{<字母>|<数字>}

<语句> ::=<赋值语句>|<条件语句>|<当循环语句>|<过程调用语句>

 |<复合语句>|<读语句><写语句>|<空>

<赋值语句> ::=<标识符>:=<表达式>

<表达式> ::= [+|-]<项>{<加法运算符> <项>}

<项> ::= <因子>{<乘法运算符> <因子>}

<因子> ::= <标识符>|<无符号整数>| ‘(’<表达式>‘)’

<加法运算符> ::= +|-

<乘法运算符> ::= *|/

<关系运算符> ::= =|<>|<|<=|>|>=

<条件语句> ::=if <条件> else <语句>

<当循环语句> ::= WHILE <条件> : <语句>

<字母> ::= a|b|…|X|Y|Z

<数字> ::= 0|1|…|8|9

2. 设计单词种别表。

1 基本字 :bool,char ,char[,class,double,false,float,getchar,include,int,long,main,null,open,printf, private,public,put,read,return,short,scanf,signed,static,stdio,string,struct,true, unsigned,void

2 标识符:Letter

3 常数:number

4 运算符 :*,-,/,=,>,<,>=,==,<=,%,+,+=,-=,*=,/=

5 界符:

'(',')',',',';','.','{','}','<','>','"'
__author__ = 'PythonStriker'


Operation=['*','-','/','=','>','<','>=','==','<=','%','+','+=','-=','*=','/=']                                                      #词法分析器中分别运算符
Delimiter=['(',')',',',';','.','{','}','<','>','"']                                                                                 #词法分析器中分别界符
KeyWord=['bool','char' ,'char[','class','double','false','float','getchar','include','int','long','main','null','open','printf',
          'private','public','put','read','return','short','scanf','signed','static','stdio','string','struct','true',
          'unsigned','void']
LeftNoteFlag=0                                                                                                                      #/*注释清除标记
RightNoteFlag=0                                                                                                                     #*/注释清除标记

class Complier():                                                                                                                   #封装成编译器
    def IsLetter(self,Char):
         if((Char>='a' and Char<='z') or( Char>='A' and Char<='Z')):
                return True
         else:
                return False

    def IsDigit(self,Char):
         if(Char<='9' and Char>='0'):
             return True
         else:
             return False

    def IsSpace(self,Char):
         if(Char==' '):
             return True
         else:
             return False
    def RemoveSpace(self,List):                                                                                                       #清除字符串中前后的空格
        indexInList=0
        for String in List:
            List[indexInList]=String.strip()
            indexInList+=1
        return List

    def IsNote(self,String):                                                                                                        #判断注释类型
        global LeftNoteFlag
        global RightNoteFlag
        index=0
        for Char in String:
            if(index<len(String)):
                index+=1
            if(Char=='/'):
                if(String[index]=='/'):
                    return 2
                el
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值