编译原理----词法分析程序----python语言版
生活随笔
收集整理的這篇文章主要介紹了
编译原理----词法分析程序----python语言版
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
對python的應(yīng)用還是不熟練,很多實用的方法沒掌握,下面的程序本來是用C寫的,為了練習一下python,又用python改寫的,很粗糙,有bug,不過能運行出結(jié)果,嘿嘿,以后學好了python再來優(yōu)化吧
#?-*-?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?"數(shù)字\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?"關(guān)鍵字\t",temp
????else:
????????print?"標識符\t",temp
?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?"數(shù)字\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?"關(guān)鍵字\t",temp
40?????else:
41?????????print?"標識符\t",temp
本文轉(zhuǎn)自ma6174博客園博客,原文鏈接:http://www.cnblogs.com/ma6174/archive/2012/03/20/2407383.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
#?-*-?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?"數(shù)字\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?"關(guān)鍵字\t",temp
????else:
????????print?"標識符\t",temp
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?"數(shù)字\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?"關(guān)鍵字\t",temp
40?????else:
41?????????print?"標識符\t",temp
42?????i-=1?
?
博主ma6174對本博客文章(除轉(zhuǎn)載的)享有版權(quán),未經(jīng)許可不得用于商業(yè)用途。轉(zhuǎn)載請注明出處http://www.cnblogs.com/ma6174/
對文章有啥看法或建議,可以評論或發(fā)電子郵件到ma6174@163.com
本文轉(zhuǎn)自ma6174博客園博客,原文鏈接:http://www.cnblogs.com/ma6174/archive/2012/03/20/2407383.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的编译原理----词法分析程序----python语言版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时间对象、引用类型
- 下一篇: iPhone失去反应咋办?