编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)
时间: 2024-05-13 12:19:26 浏览: 44
好的,我可以给你提供一个基于正则表达式的简单的单词扫描器的实现,代码如下:
```python
import re
# 定义正则表达式
regex_patterns = {
"RESERVED_WORDS": r"(?i)\b(if|else|while|for|do|break|continue|return|switch|case|default|int|float|double|bool|char|string|void)\b",
"IDENTIFIER": r"[a-zA-Z_]\w*",
"CONSTANT": r"(\d+\.\d*|\.\d+|\d+)[fFlL]?",
"OPERATOR": r"(\+|\-|\*|\/|\%|<|>|<=|>=|==|!=|&&|\|\|)",
"SEPARATOR": r"[\(\)\{\}\[\]\,\;\:]"
}
# 定义内部编码
token_codes = {
"RESERVED_WORDS": 1,
"IDENTIFIER": 2,
"CONSTANT": 3,
"OPERATOR": 4,
"SEPARATOR": 5
}
# 定义扫描函数
def scan(source_code):
tokens = []
position = 0
while position < len(source_code):
match = None
for pattern_name, pattern in regex_patterns.items():
regex = re.compile(pattern)
match = regex.match(source_code, position)
if match:
value = match.group(0)
token = (token_codes[pattern_name], value)
tokens.append(token)
position = match.end(0)
break
if not match:
tokens.append(("Error", source_code[position]))
position += 1
return tokens
# 测试
source_code = "int main() { int x = 1 + 2; return x; }"
tokens = scan(source_code)
for token in tokens:
print(token)
```
这个扫描器会将输入的源程序扫描并输出一个由元组组成的列表,每个元组包括内部编码和单词符号自身值两个部分。你可以根据需要对正则表达式和内部编码进行修改和扩展。
阅读全文