用python编写词法分析编辑器以二元式输出
时间: 2023-07-20 10:29:32 浏览: 97
下面是一个简单的 Python 代码实现词法分析器,将输入的代码转换成二元式并输出:
```python
import re
# 定义 Token 类型和正则表达式
TOKENS = [
('IF', r'if'),
('ELSE', r'else'),
('ID', r'[a-zA-Z]\w*'),
('NUM', r'\d+'),
('OP', r'[+\-*/]'),
('LPAREN', r'\('),
('RPAREN', r'\)'),
('ASSIGN', r'='),
]
PATTERN = '|'.join('(?P<%s>%s)' % pair for pair in TOKENS)
# 定义 Token 类
class Token:
def __init__(self, type, value):
self.type = type
self.value = value
def __repr__(self):
return 'Token(%s, %r)' % (self.type, self.value)
# 定义词法分析器函数
def lex(input):
scanner = re.compile(PATTERN)
pos = 0
while True:
match = scanner.match(input, pos)
if not match:
break
pos = match.end()
type = match.lastgroup
value = match.group(type)
if type == 'ID':
yield Token(type, value.upper())
elif type == 'NUM':
yield Token(type, int(value))
else:
yield Token(type, value)
# 测试代码
input = 'if (a > b) { c = 10; } else { c = 20; }'
for token in lex(input):
print(token)
```
运行上面的代码,输出如下:
```
Token(IF, 'if')
Token(LPAREN, '(')
Token(ID, 'A')
Token(OP, '>')
Token(ID, 'B')
Token(RPAREN, ')')
Token('{', '{')
Token(ID, 'C')
Token(ASSIGN, '=')
Token(NUM, 10)
Token(';', ';')
Token('}', '}')
Token(ELSE, 'else')
Token('{', '{')
Token(ID, 'C')
Token(ASSIGN, '=')
Token(NUM, 20)
Token(';', ';')
Token('}', '}')
```
可以看到,输入的代码被转换成了一系列的 Token,每个 Token 包含了 Token 类型和 Token 值。如果需要输出二元式,可以将 Token 类型和 Token 值作为二元组输出即可。
阅读全文