生成一个简单语言词法分析器代码
时间: 2024-11-09 14:17:48 浏览: 9
C语言开发课程设计词法分析器源代码.zip
5星 · 资源好评率100%
词法分析器,也称为扫描器或 lexer,是程序设计中用于将输入文本分解成有意义的符号(token),如标识符、关键字、运算符等的第一步。这里是一个非常基础的Python词法分析器示例,使用正则表达式:
```python
import re
class SimpleLexer:
def __init__(self):
self.tokens = {
'ID': r'[a-zA-Z_][a-zA-Z0-9_]*', # 标识符
'NUMBER': r'\d+', # 整数
'PLUS_MINUS': r'\+|-', # 加减号
'MULT_DIV': r'\*', '/', # 乘除号
'LPAREN': r'\(', # 左括号
'RPAREN': r'\)', # 右括号
'SEMI_COLON': r';', # 分号
'STRING': r'"[^"]*"|\'[^\']*\'', # 字符串
}
self.current_char = ''
self.token = None
self.line_number = 1
def get_next_token(self, input_string):
while True:
if not self.current_char:
if not input_string:
break
self.current_char = input_string[0]
input_string = input_string[1:]
self.line_number += 1
for token_type, regex in self.tokens.items():
match = re.match(regex, self.current_char)
if match:
self.token = (token_type, self.current_char)
self.current_char = ''
return self.token
if self.current_char.isspace():
self.current_char = ''
def peek_token(self):
return self.token
# 使用示例
lexer = SimpleLexer()
input_string = "var x = 5; y = 'Hello';"
while lexer.get_next_token(input_string) is not None:
print(f"Line {lexer.line_number}: {lexer.token[0]} - {lexer.token[1]}")
```
这个简单的词法分析器只能处理一些基本的语法元素,实际应用中会更复杂,包括错误处理和更多的模式匹配规则。
阅读全文