分析器

更新时间:2022-12-31 10:07:40 阅读: 评论:0


2022年12月31日发(作者:dareyou)

词法分析器

实验介绍

词法分析器的功能是:输⼊源程序,按照构词规则分解成⼀系列单词符号。

单词是语⾔中具有独⽴意义的最⼩单位,包括关键字、标识符、运算符、界符和常量等

(1)关键字是由程序语⾔定义的具有固定意义的标识符。例如,Pascal中的begin,end,if,while都是保留字。这些字通常不⽤作⼀般标

识符。

(2)标识符⽤来表⽰各种名字,如变量名,数组名,过程名等等。

(3)常数常数的类型⼀般有整型、实型、布尔型、⽂字型等。

(4)运算符如+、-、*、/等等。

(5)界符如逗号、分号、括号、等等。

实验内容

输⼊:给定⼀段源程序代码

输出:token表和error表,两个表都是三元组列表(⾏数,单词,类型).token表记录分析出的单词,error表记录程序代码的错误.

实现原理

c语⾔⼦集对应的状态转换图

程序源码

中存放要分析的源程序

inta=1;

while(a<=10a){

a++;

}

inta=1;

while(a<=10a){

a++;

}

存放分析程序代码

defis_alphabet(c):

#判断是否是字母

if'a'<=c<='z'or'A'<=c<='Z':

returnTrue

el:

returnFal

defis_digit(c):

#判断是否是数字

if'0'<=c<='9':

returnTrue

el:

returnFal

defis_operator(c):

#判断是否是运算符

operator=[

'+',

'-',

'*',

'/',

'=',

'<',

'>',

]

ifcinoperator:

returnTrue

el:

returnFal

defis_parator(c):

parator=[

'(',

')',

'{',

'}',

';',

]

ifcinparator:

returnTrue

el:

returnFal

defprocess_word(n,s):

#是否关键字

key_words=['int','while']

ifsinkey_words:

returnn,s,'关键字'

el:

returnn,s,'保留字'

defprocess_digit(n,s):

returnn,s,'常数'

if__name__=='__main__':

result=list()

errors=list()

实验结果

errors=list()

line_number=1

forlineinopen('','r'):

index=0

whileindex

#取下⼀个字符

char=line[index]

token=[char,]

ifis_alphabet(char):

#字母开头,则提取后⾯的字符串:

whileTrue:

c=line[index+1]

ifis_alphabet(c)oris_digit(c):

(c)

index+=1

()==''oris_operator(c)oris_parator(c):

break

el:

print('出错了!',c)

break

#处理token

(process_word(line_number,''.join(token)))

ifis_digit(char):

flag=True

#数字开头

whileTrue:

c=line[index+1]

ifis_digit(c):

(c)

index+=1

elifis_alphabet(c):

flag=Fal

(c)

index+=1

el:

break

ifflag:

(process_digit(line_number,''.join(token)))

el:

((line_number,''.join(token),"标识符不能数字开头"))

ifis_parator(char):

#分隔符

((line_number,char,'分隔符'))

index+=1

ifis_operator(char):

c=line[index+1]

ifis_operator(c):

(c)

index+=1

#分隔符

((line_number,''.join(token),'运算符'))

index+=1

index+=1

line_number+=1

print('==================token表=====================')

foriteminresult:

print(item)

print('==================error表=====================')

foriteminerrors:

print(item)

总结

程序设计语⾔和⾃然语⾔不⼀样,都是⽤符号来描述,每个特定的符号表⽰特定的意思,⽽且程序设计语⾔是上下⽂⽆关的。上下⽂⽆关就

是某⼀个特定语句所要表达的意思和它所处的上下⽂没有关系,只有它⾃⾝决定。

本文发布于:2022-12-31 10:07:40,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/64783.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:conversations
下一篇:priv
标签:分析器
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图