使用python构建一个词法分析器
时间: 2024-06-09 21:12:20 浏览: 92
好的,我可以帮你介绍一下如何使用 Python 构建一个简单的词法分析器。
在 Python 中,你可以使用正则表达式来匹配文本中的各种模式,从而实现词法分析的功能。下面是一个简单的示例代码:
```python
import re
# 定义正则表达式规则
TOKENS = [
('NUMBER', r'\d+'),
('PLUS', r'\+'),
('MINUS', r'-'),
('MULTIPLY', r'\*'),
('DIVIDE', r'/'),
]
# 定义词法分析器函数
def lex(input_string):
tokens = []
while len(input_string) > 0:
match = None
for token in TOKENS:
name, pattern = token
regex = re.compile(pattern)
match = regex.match(input_string)
if match:
text = match.group(0)
tokens.append((name, text))
input_string = input_string[len(text):]
break
if not match:
raise ValueError('Illegal character: %s' % input_string[0])
return tokens
# 测试词法分析器
input_string = '3 + 4 * 2 - 1 / 5'
tokens = lex(input_string)
print(tokens)
```
在上述代码中,我们定义了一个 TOKENS 列表,其中包含了我们想要识别的各种模式。例如,我们定义了一个名为 NUMBER 的模式,它可以匹配一个或多个数字字符。我们还定义了一些其他的模式,如 PLUS、MINUS、MULTIPLY 和 DIVIDE,它们可以匹配加减乘除等运算符。
然后,我们定义了一个名为 lex 的词法分析器函数。它使用一个 while 循环来遍历输入字符串,并在 TOKENS 列表中查找匹配的模式。如果找到了匹配的模式,就将匹配到的文本和模式名称添加到 tokens 列表中,并从输入字符串中删除匹配到的文本。如果找不到匹配的模式,则抛出一个 ValueError 异常。
最后,我们使用 input_string = '3 + 4 * 2 - 1 / 5' 这个字符串来测试我们的词法分析器,并打印输出 tokens 列表,可以得到如下结果:
```
[('NUMBER', '3'), ('PLUS', '+'), ('NUMBER', '4'), ('MULTIPLY', '*'), ('NUMBER', '2'), ('MINUS', '-'), ('NUMBER', '1'), ('DIVIDE', '/'), ('NUMBER', '5')]
```
这个结果表明,我们的词法分析器成功地将输入字符串分解成了一个个的 token,每个 token 由一个模式名称和一个文本组成。
阅读全文