一个小型词法分析程序
时间: 2024-02-03 10:15:51 浏览: 34
下面是一个简单的小型词法分析程序,它可以将输入的字符串分解成一个个单词:
```python
def lex(string):
# 将输入字符串按空格分割成单词列表
tokens = string.split()
# 定义单词类型和对应的正则表达式
types = {
"NUMBER": r"\d+",
"OPERATOR": r"[+\-*/]",
"LPAREN": r"\(",
"RPAREN": r"\)"
}
# 对每个单词进行类型判断
for token in tokens:
for type_name, pattern in types.items():
if re.fullmatch(pattern, token):
yield (type_name, token)
break
else:
yield ("UNKNOWN", token)
```
上述代码使用了 Python 的正则表达式库 `re`,根据定义的单词类型和对应的正则表达式,对输入的字符串进行分析,将每个单词的类型和值作为元组返回,其中未能匹配的单词类型为 `"UNKNOWN"`。例如,对于字符串 `"1 + 2 * (3 - 4)"` 的分解结果为:
```
("NUMBER", "1")
("OPERATOR", "+")
("NUMBER", "2")
("OPERATOR", "*")
("LPAREN", "(")
("NUMBER", "3")
("OPERATOR", "-")
("NUMBER", "4")
("RPAREN", ")")
```