使用python写一个词法分析器200行代码
时间: 2023-11-22 22:53:52 浏览: 83
python词法分析器
5星 · 资源好评率100%
以下是一个简单的词法分析器代码示例,仅供参考,可能不够完善:
```python
import re
keywords = ['if', 'else', 'while', 'for', 'int', 'float', 'double', 'char', 'void']
operators = ['+', '-', '*', '/', '=', '>', '<', '>=', '<=', '==', '!=']
delimiters = [';', ',', '(', ')', '{', '}']
def tokenizer(code):
tokens = []
i = 0
while i < len(code):
if code[i].isspace():
i += 1
elif code[i].isalpha():
match = re.match(r'^[a-zA-Z]\w*', code[i:])
word = match.group()
if word in keywords:
tokens.append(('keyword', word))
else:
tokens.append(('identifier', word))
i += len(word)
elif code[i].isdigit():
match = re.match(r'^\d+', code[i:])
num = match.group()
tokens.append(('number', num))
i += len(num)
elif code[i] in operators:
if code[i:i+2] in operators:
tokens.append(('operator', code[i:i+2]))
i += 2
else:
tokens.append(('operator', code[i]))
i += 1
elif code[i] in delimiters:
tokens.append(('delimiter', code[i]))
i += 1
else:
i += 1
return tokens
code = """
int main() {
int a = 1;
if (a == 1) {
printf("Hello, world!");
}
return 0;
}
"""
tokens = tokenizer(code)
for token in tokens:
print(token)
```
这个词法分析器使用正则表达式进行匹配,将代码分解为多个token,每个token都是一个元组,第一个元素是token类型,第二个元素是token的值。这个词法分析器仅支持简单的代码,可能不够完善,仅供参考。
阅读全文