编译原理-词法分析-语法分析-语义分析生成中间代码-python版

# -*- coding:UTF-8 -*-
#!/usr/bin/python
import string
import sys
import Analyze_2
Identifier=['if','else','for','while','do','int','write','read','']
Delimiter="( ) } { ;"
Operator_1="+-*/"
Operator_2="<>="
def init(FileName):
	i=0
	row=1
	j=0
	Got_char=[]
	Str=''
	file_1=open(FileName,'r')
	file_2=open("analyze_2.txt",'wr')
	fin=file_1.read()
	file_1.close()
	for x in fin:
		Got_char.append(x)
	#judge String -----------------------***************************---------------------
	while i<len(Got_char)-1:
		while(Got_char[i] ==' 'or Got_char[i]=='\n'or Got_char=='\t'):
			if(Got_char[i]=='\n'):
				row+=1
			i+=1
		if Got_char[i].isalpha():
			Str+=Got_char[i]
			i+=1
			while(Got_char[i].isalpha()or Got_char[i].isdigit()):
				Str=Str+Got_char[i]
				i+=1
			while(cmp(Str,Identifier[j])and j<=7):
				j+=1
			if j>=8:
				file_2.write(Str+' ID '+str(row)+'\n')
			else:
				file_2.write(Str+' '+Str+' '+str(row)+'\n')
			Str=''
			j=0
	#Judge Number ************************--------------------**********************
		elif Got_char[i].isdigit():
			Str+=Got_char[i]
			i+=1
			if  Got_char[i-1]!='0'and Got_char[i].isdigit():
				while Got_char[i].isdigit():
					Str+=Got_char[i]
					i+=1
			file_2.write(Str+' NUM '+str(row)+'\n')
			Str=''
	#Judge Delimiter ---------------------********************--------------
		elif Delimiter.find(Got_char[i])>=0:
			Str+=Got_char[i]
			i+=1
			file_2.write(Str+' '+Str+' '+str(row)+'\n')
			Str=''
	#Judge Operator ********************-----------------------*************
		elif  Operator_1.find(Got_char[i])>=0 and Got_char[i+1]!='*' :
			Str+=Got_char[i]
			i+=1
			file_2.write(Str+' '+Str+' '+str(row)+'\n')
			Str=''
		elif Operator_2.find(Got_char[i])>=0:
			Str+=Got_char[i]
			i+=1
			if Got_char[i]=='=':
				Str+=Got_char[i]
				i+=1
			file_2.write(Str+' '+Str+' '+str(row)+'\n')
			Str=''
		elif Got_char[i]=='!':
			Str+=Got_char[i]
			i+=1
			if Got_char[i]=='=':
				Str+=Got_char[i]
				i+=1
			file_2.write(Str+' '+Str+' '+str(row)+'\n')
			Str=''
	#Judge Comment **************-----------------------------*************
		elif Got_char[i]=='/':
			Str+=Got_char[i]
			i+=1
			if Got_char[i]=='*':
				Str+=Got_char[i]
				i+=1
				while(Got_char[i]!='*'or Got_char[i+1]!='/'):
					Str+=Got_char[i]
					print i,len(Got_char)
					i+=1
					if i+1>=len(Got_char):
						break
				if Got_char[i]=='*'and Got_char[i+1]=='/':
					Str+=Got_char[i]+Got_char[i+1]
					i+=1
					if i>len(Got_char):
						break
					file_2.write(Str+' Comment '+str(row)+'\n')
			Str=''<pre name="code" class="python">i=0
row=1
Str=''
Got_char=[]
data={}
addr=0
file_new=open("analyze_3.txt",'wr')
labelp=0


                
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值