编写一个简单的词法分析器,输出每个单词符号及种别。
时间: 2024-05-07 22:22:38 浏览: 112
好的,以下是一个简单的词法分析器实现,可以读入一个字符串并输出每个单词符号及其种别。
```python
import re
def tokenize(input_string):
# 定义正则表达式模式匹配各种单词符号
patterns = [
('INT', r'\d+'),
('ADD_OP', r'\+'),
('SUB_OP', r'-'),
('MUL_OP', r'\*'),
('DIV_OP', r'/'),
('LPAREN', r'\('),
('RPAREN', r'\)'),
('WHITESPACE', r'\s+'),
]
tokens = []
while len(input_string) > 0:
match = None
for pattern in patterns:
name, regex = pattern
match = re.match(regex, input_string)
if match:
value = match.group(0)
tokens.append((name, value))
input_string = input_string[len(value):]
break
if not match:
raise ValueError('Invalid input: %s' % input_string)
return tokens
```
这个词法分析器通过正则表达式逐个匹配输入字符串中的单词符号,并输出其对应的种别。在上面的代码中,我们定义了一些常见的单词符号和它们的正则表达式模式。当我们读入一个字符串时,我们按照定义的顺序匹配每个模式,找到第一个匹配的单词符号,将其分组并添加到输出列表中,然后从输入字符串中删除这个单词符号。如果输入字符串中没有匹配的单词符号,那么我们会引发一个ValueError异常。最后,我们返回输出列表,其中包含每个单词符号及其种别。
阅读全文