给我写一个词法分析器
时间: 2023-12-12 14:05:58 浏览: 30
好的,下面是一个简单的词法分析器示例,可以识别出基本的运算符和数字:
```python
import re
# 定义正则表达式模式
patterns = [
('NUMBER', r'\d+(\.\d+)?'), # 匹配数字
('PLUS', r'\+'), # 匹配加号
('MINUS', r'-'), # 匹配减号
('TIMES', r'\*'), # 匹配乘号
('DIVIDE', r'/'), # 匹配除号
('LPAREN', r'\('), # 匹配左括号
('RPAREN', r'\)'), # 匹配右括号
]
# 将正则表达式编译为模式对象
token_regex = re.compile('|'.join('(?P<%s>%s)' % pair for pair in patterns))
def tokenize(text):
"""对输入文本进行词法分析"""
tokens = []
for match in token_regex.finditer(text):
kind = match.lastgroup
value = match.group()
tokens.append((kind, value))
return tokens
```
使用示例:
```python
tokens = tokenize('3 + 4 * 5 - 6 / 2')
print(tokens)
# 输出:[('NUMBER', '3'), ('PLUS', '+'), ('NUMBER', '4'), ('TIMES', '*'), ('NUMBER', '5'), ('MINUS', '-'), ('NUMBER', '6'), ('DIVIDE', '/'), ('NUMBER', '2')]
```
这个词法分析器能够识别数字和运算符,并将它们分成了不同的标记。你可以根据需要添加更多的模式来识别其他类型的标记。