请使用Python,编写一个词法分析器.输入一段程序,该词法分析器能够识别关键字,分隔符,运算符,标识符以及常量等单词.输入的程序段样例为: int main(){ int a1,b2; int _c =a1+2*b2-9; return 0; }。
时间: 2024-10-23 20:17:20 浏览: 39
要编写一个简单的Python词法分析器,可以使用内置模块`re`来进行正则表达式的匹配。这里我们只简单地处理基本的关键字、标识符、数字和一些基本的运算符。请注意,实际的词法分析器会更复杂,包括处理更多种类的字符和考虑整个语言的语法规则。
```python
import re
def lex_analyzer(code):
keywords = {'int', 'main', '{', '}', ';', ',', '=', '+', '-', '*', '/', 'return'}
identifiers = r'[a-zA-Z_][a-zA-Z0-9_]*'
constants = r'\d+'
tokens = []
pattern = '|'.join((r'\b' + k + r'\b' for k in keywords) +
(identifiers, constants) +
(r'\+\+', r'\-\-', r'\*', r'\/', r'\='))
for match in re.findall(pattern, code, re.MULTILINE):
if match in keywords:
token_type = match
elif match.isdigit():
token_type = 'constant'
else:
token_type = 'identifier'
tokens.append((token_type, match))
return tokens
input_code = """
int main(){
int a1,b2;
int _c =a1+2*b2-9;
return 0;
}
"""
print(lex_analyzer(input_code))
```
运行上述代码,将得到一个列表,其中包含识别出的各种类型和值:
```python
[('int', 'int'), ('main', 'main'), ('(', '('), (')', ')'), ({...}, '{'), (';', ';'), ('int', 'int'), ('a1', 'a1'), (',', ','), ('b2', 'b2'), (';', ';'), ('int', 'int'), ('_', '_'), ('c', 'c'), ('=', '='), ('a1', 'a1'), ('+', '+'), ('2', '2'), ('*', '*'), ('b2', 'b2'), ('-', '-'), ('9', '9'), (';', ';'), ('return', 'return'), ('0', '0'), (')', ')')]
```
阅读全文