词法分析器
实验介绍
词法分析器的功能是:输⼊源程序,按照构词规则分解成⼀系列单词符号。
单词是语⾔中具有独⽴意义的最⼩单位,包括关键字、标识符、运算符、界符和常量等
(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小时内删除。
留言与评论(共有 0 条评论) |