编译原理----词法分析程序----python语言版

对python的应用还是不熟练,很多实用的方法没掌握,下面的程序本来是用C写的,为了练习一下python,又用python改写的,很粗糙,有bug,不过能运行出结果,嘿嘿,以后学好了python再来优化吧
#  -*- coding: cp936 -*-
Keyword = ( " begin ", " end ", " if ", " while ", " var ", " procedure ", " else ", " for ", " do ", " int ", " read ", " write ")
Yunsuanfu = ( ' + ', ' - ', ' * ', ' / ', ' < ', ' > ', ' % ', ' = ')
Fenjiefu = ( ' , ', ' ; ', ' ( ', ' ) ', ' { ', ' } ', ' : ')
Kongbai = ( '   ', ' \t ', ' \n ')
Number = ( ' 0 ', ' 1 ', ' 2 ', ' 3 ', ' 4 ', ' 5 ', ' 6 ', ' 7 ', ' 8 ', ' 9 ')

test= " var a=10;\nvar b,c;\nprocedure p; \n\tbegin\n\t\tc=a+b\n\tend\n "
print test
length=len(test)

for i  in range(length):
     if test[i]  in Kongbai:
         continue
     if test[i]  in Fenjiefu:
         print  " 分界符\t ",test[i]
         continue
     if test[i]  in Yunsuanfu:
         print  " 运算符\t ",test[i]
         continue
     if test[i-1]  in Number:
         continue
     if test[i]  in Number:
         print  " 数字\t ",
         while test[i]  in Number:
             print test[i],
            i+=1
         print  ''
     if test[i-1]  in Number  or (test[i-1]>= ' a '  and test[i-1]<= ' z '):
         continue
    j=0
    temp =  ""
     while True:
         if test[i]  in Kongbai  or test[i]  in Yunsuanfu  or test[i]  in Fenjiefu:
             break
         else:
            j+=1
        i+=1
    temp = test[i-j:i]    
     if temp  in Keyword:
         print  " 关键字\t ",temp
     else:
         print  " 标识符\t ",temp

编译原理----词法分析程序----python语言版

2012年3月21日 22:43:52改写的代码:

 1  #  -*- coding: cp936 -*-
 2  Keyword = ( " begin ", " end ", " if ", " while ", " var ", " procedure ", " else ", " for ", " do ", " int ", " read ", " write ")
 3 Yunsuanfu = ( ' + ', ' - ', ' * ', ' / ', ' < ', ' > ', ' % ', ' = ')
 4 Fenjiefu = ( ' , ', ' ; ', ' ( ', ' ) ', ' { ', ' } ', ' : ')
 5 Kongbai = ( '   ', ' \t ', ' \n ')
 6 
 7 test= " var a=10;\nvar b,c;\nprocedure p; \n\tbegin\n\t\tc=a+b\n\tend\n "
 8  print test
 9 length=len(test)
10 i=-1
11  while i < length:
12     i+=1
13      if test[i]  in Kongbai:
14          continue
15      if test[i]  in Fenjiefu:
16          print  " 分界符\t ",test[i]
17          continue
18      if test[i]  in Yunsuanfu:
19          print  " 运算符\t ",test[i]
20          continue
21      if test[i].isdigit():
22          print  " 数字\t ",
23          while test[i].isdigit():
24              print test[i],
25             i+=1
26          print  ''
27         i-=1
28          continue
29     j=0
30     temp =  ""
31      while True:
32          if test[i]  in Kongbai  or test[i]  in Yunsuanfu  or test[i]  in Fenjiefu:
33              break
34          else:
35             j+=1
36         i+=1
37     temp = test[i-j:i]    
38      if temp  in Keyword:
39          print  " 关键字\t ",temp
40      else:
41          print  " 标识符\t ",temp

42     i-=1 

 

你可能感兴趣的:(python)