python基礎:
1、list的使用,即列表。定義:list(列表名) = ;如下還有對他的遍歷,這裡的word算是定義了乙個變數去儲存res[i]的值:
# -*- coding: cp936 -*-
if __name__=="__main__":
res =
res = ["hello", "you", "are", "good"]
i = 0
#對列表的遍歷
for word in res:
print("第", i ,"位置的元素", word)
2、縮排問題: 一般預設為4個空格的縮排,可以使用tab鍵或者空格,但是注意如果使用混亂,可能出現unexcepted indent之類的錯誤。
3、注釋:使用#號,如果是多行注釋則是''' *** '''(頭尾三個單引號,注意中英文的區別)。
4、函式定義:def 函式名; 或者利用函式物件的__name__屬性: if __name__=="__main__"。
5、正規表示式的使用:
# -*- coding: cp936 -*-
import re
if __name__=="__main__":
temp = 'aaa bbb ccc ddd eee'
res = re.split('\s+', temp)
print(res)
6、讀寫檔案(使用的是with/ 還可以使用open- read- close):
# -*- coding: cp936 -*-
if __name__=="__main__":
filename = 'd:\demo.txt'
filename2 = 'd:\demo1.txt'
with open(filename, "r") as fin:
res = [line.strip() for line in fin]
print(res)
#for line in fin:
#print(line)
with open(filename2, "a") as fo:
#這裡寫在txt檔案式一行,因為它是按行讀的。
for line in res:
if line:
fo.write(line)
else:
continue
詞法分析:是編譯原理中第一步需要做的事,將給定的程式或者其他讀取,根據詞的類別不同,進行分類。即可以理解將一段程式分成乙個個的詞。
先讀取test.c的內容,存進乙個列表中, 然後通過和數個正規表示式進行match匹配,從而進行分類。這裡分類還是存在一些小的問題,歡迎提出更優的解決方案。謝謝!
待讀的**:
#include int main(int argc, char const *argv)
return 0;
}
#!/usr/bin/python
# -*- coding: cp936 -*-
#ex2.py
import re
class token(object):
#初始化
def __init__(this):
#儲存分詞的列表
this.results =
#行號this.lineno = 1
#關鍵字
this.keywords = ['auto', 'struct', 'if', 'else', 'for', 'do', 'while', 'const',
'int', 'double', 'float', 'long', 'char', 'short', 'unsigned',
'switch', 'break', 'de****t', 'continue', 'return', 'void', 'static',
'auto', 'enum', 'register', 'typeof', 'volatile', 'union', 'extern']
'''regex中:*表示從0-, +表示1-, ?表示0-1。對應的需要轉義
|(double)|(int)|(if)|' \
r'(#include)|(return)|(char)|(stdio\.h)|(const))'
#運算子
operator = r'(?p\+\+|\+=|\+|--|-=|-|\*=|/=|/|%=|%)'
#分隔符/界符
separator = r'(?p[,:\{}:)(<>])'
#數字: 例如:1 1.9
number = r'(?p\d+[.]?\d+)'
#變數名 不能使用關鍵字命名
id = r'(?p[a-za-z_][a-za-z_0-9]*)'
#方法名 重複n次
method = r'(?p(main)|(printf))'
#錯誤 \s 匹配任意不是空白符的字元
#error = r'(?p.*\s+)'
error = r'\"(?p.*)\"'
#注釋 ^匹配行的開始 .匹配換行符以外的任意字元 \r回車符 \n換行符
annotation = r'(?p/\*(.|[\r\n])*/|//[^\n]*)'
#進行組裝,將上述正規表示式以邏輯的方式進行拼接, 按照一定的邏輯順序
# compile函式用於編譯正規表示式,生成乙個正規表示式物件
this.patterns = re.compile('|'.join([annotation, keyword, method, id, number, separator, operator, error]))
#讀檔案
def read_file(this, filename):
with open(filename, "r") as f_input:
return [line.strip() for line in f_input]
#結果寫入檔案
def write_file(this, lines, filename = 'd:/results.txt'):
with open(filename, "a") as f_output:
for line in lines:
if line:
f_output.write(line)
else:
continue
def get_token(this, line):
#finditer : 在字串中找到正規表示式所匹配的所有字串, 並把他們作為乙個迭代器返回
for match in re.finditer(this.patterns, line):
#group():匹配的整個表示式的字元 # yield 關鍵字:類似return ,返回的是乙個生成器,generator
yield (match.lastgroup, match.group())
def run(this, line, flag=true):
for token in this.get_token(line):
if flag:
print ("line %3d :" % this.lineno, token)
'''else:
yield "line %3d :" % this.lineno + str(token) + "\n"
'''def printrun(this, line, flag = true):
for token in this.get_token(line):
if flag:
print ("lines x: ", token)
if __name__=='__main__':
token = token()
filepath = "d:/test.c"
lines = token.read_file(filepath)
for line in lines:
token.run(line, true)
#寫入指定檔案中
以上就是這篇的全部內容,歡迎提出您的意見。謝謝!
編譯原理基礎 詞法分析
一 概述 詞法分析是編譯的第乙個階段。詞法分析器的作用是讀入源程式的輸入字元,將他們組成詞素,生成並輸出乙個詞法單元序列,這個詞法單元序列被輸入到語法分析器進行語法分析。另外,由於語法分析器在編譯器中負責讀取源程式,因此,除了識別詞素,它還會完成一些其他任務,比如,過濾掉源程式中的一些注釋和空白,將...
python等縮排語言的詞法分析實現
python等縮排語言的詞法分析實現 定義兩個虛擬的token tokens 還有乙個縮排棧,用於確定是縮排一行,還是回退一行 stack indentstack new stack 在開始做詞法分析之前,壓入乙個預設的indent,這一步其實沒什麼必要,只是用來避免寫判斷棧頂是否為空的冗餘判斷 i...
python表示式詞法分析 詞法分析器
前言 在這一系列文章中,我們將會使用python語言來實現pl0編譯器。首先我們來實現編譯器中的詞法分析的功能。我們使用正規表示式來對源程式的程式語句篩選為 關鍵字keywords,數字numbers,變數variables,分隔符separatores和運算子operatores五種類別。詞法分析...