b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

python 科学计算 Python怎样使用解释器(2)

电脑杂谈  发布时间:2017-12-31 06:02:03  来源:网络整理

pattern, tag = token_expr

regex = re.compile(pattern)

match = regex.match(characters, pos)

if match:

text = match.group(0)

if tag:

token = (text, tag)

tokens.append(token)

break

if not match:

sys.stderr.write('Illegal character: %sn' % characters[pos])

sys.exit(1)

else:

pos = match.end(0)

return tokens

注意,我们遍历正则表达式的顺序很重要。lex会遍历所有的表达式,然后接受第一个匹配成功的表达式。这也就意味着,当使用词法分析器时,我们应当首先考虑最具体的表达式(像那些匹配算子(matching operator)和关键词),其次才是比较一般的表达式(像标识符和数字)。

词法分析器

给定上面的lex函数,为IMP定义一个词法分析器就非常简单了。首先我们要做的就是为标记符定义一系列的标签。IMP只需要三个标签。RESERVED表示一个保留字或操作符。INT表示一个文字整数。python 科学计算python 科学计算ID代表标识符。

Python

1

2

3

4

5

import lexer

RESERVED = 'RESERVED'

INT= 'INT'

ID = 'ID'

接下来定义词法分析器将会用到的标记符表达式。前两个表达式匹配空格和注释。它们没有标签,所以 lex 会丢弃它们匹配到的所有字符。

Python

1

2

3

token_exprs = [

(r'[ nt]+',None),

(r'#[^n]*', None),

然后,只剩下所有的操作符和保留字了。记住,每个正则表达式前面的“r”表示这个字符串是“raw”;Python不会处理任何转义字符。这使我们可以在字符串中包含进反斜线,正则表达式正是利用这一点来转义操作符比如“+”和“*”。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

pycharm 科学计算_python科学计算 作用_python 科学计算

16

17

18

19

20

21

22

23

(r':=', RESERVED),

(r'(',RESERVED),

(r')',RESERVED),

(r';', RESERVED),

(r'+',RESERVED),

(r'-', RESERVED),

(r'*',RESERVED),

(r'/', RESERVED),

(r'<=',RESERVED),

(r'<', RESERVED),

(r'>=',RESERVED),

(r'>', RESERVED),

(r'=', RESERVED),

(r'!=',RESERVED),

(r'and', RESERVED),

(r'or',RESERVED),

(r'not', RESERVED),

(r'if',RESERVED),

(r'then',RESERVED),

(r'else',RESERVED),

(r'while', RESERVED),

(r'do',RESERVED),

(r'end', RESERVED),

最后,轮到整数和标识符的表达式。要注意的是,标识符的正则表达式会匹配上面的所有的保留字,所以它一定要留到最后。

Python

1

2

3

(r'[0-9]+',INT),

(r'[A-Za-z][A-Za-z0-9_]*', ID),

]

既然正则表达式已经定义好了,我们还需要创建一个实际的lexer函数。

Python

1

2

def imp_lex(characters):

return lexer.lex(characters, token_exprs)

如果你对这部分感兴趣,这里有一些驱动代码可以测试输出:

Python

1

2

3

4

5

6

7

8

9

10

11

import sys

from imp_lexer import *

if __name__ == '__main__':

filename = sys.argv[1]

file = open(filename)

characters = file.read()

file.close()

tokens = imp_lex(characters)

for token in tokens:

print token

继续……

如果你对于实现IMP解释器很感兴趣,你可以从这里下载全部的源码。

在源码包含的示例文件中运行解释器:

Python

1

python imp.py hello.imp

运行单元测试:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-57061-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...