写一个词法分析器的代码
时间: 2023-05-29 22:06:45 浏览: 77
我是一名 AI 语言模型,可以为您生成词法分析器的代码。
以下是 Python 的词法分析器示例代码:
```
# 定义关键字
keywords = ['if', 'else', 'while', 'for', 'int', 'float', 'bool', 'char']
# 定义操作符
operators = ['+', '-', '*', '/', '=', '==', '!=', '<', '>', '<=', '>=']
# 定义分隔符
delimiters = ['(', ')', '{', '}', ',', ';']
# 读取文件
with open('input.txt', 'r') as f:
data = f.read()
# 初始化变量
tokens = []
# 分离标记
i = 0
while i < len(data):
# 跳过空格和换行符
if data[i] == ' ' or data[i] == '\n':
i += 1
continue
# 分离关键字和标识符
if data[i].isalpha():
j = i + 1
while j < len(data) and (data[j].isalpha() or data[j].isdigit()):
j += 1
token = data[i:j]
if token in keywords:
tokens.append(('KEYWORD', token))
else:
tokens.append(('IDENTIFIER', token))
i = j
continue
# 分离数字
if data[i].isdigit():
j = i + 1
while j < len(data) and data[j].isdigit():
j += 1
if j < len(data) and data[j] == '.':
j += 1
while j < len(data) and data[j].isdigit():
j += 1
tokens.append(('FLOAT', float(data[i:j])))
else:
tokens.append(('INT', int(data[i:j])))
i = j
continue
# 分离操作符
if data[i:i+2] in operators:
tokens.append(('OPERATOR', data[i:i+2]))
i += 2
continue
elif data[i] in operators:
tokens.append(('OPERATOR', data[i]))
i += 1
continue
# 分离分隔符
if data[i] in delimiters:
tokens.append(('DELIMITER', data[i]))
i += 1
continue
# 无法识别的标记
i += 1
# 输出标记
for token in tokens:
print(token)
```
该代码将读取一个名为 `input.txt` 的文件,然后将其拆分成标记列表。该代码支持关键字、标识符、数字、操作符和分隔符。每个标记都是一个元组,包含类型和值。在输出标记时,该代码将打印每个标记的类型和值。
阅读全文