设计词法分析器,识别单词符号:把词法分析器安排成一个子程序,每当语法分析器需要一个单词符号时就调用这个子程 序,一个单词一个单词的输出
时间: 2024-01-15 15:05:24 浏览: 64
编译原理实验报告(词法分析器语法分析器)
5星 · 资源好评率100%
好的,设计一个简单的词法分析器,可以识别以下单词符号:
- 标识符(由字母和数字组成,以字母开头)
- 数字(整数或浮点数)
- 运算符(+、-、*、/、=)
- 括号((、))
- 分号(;)
以下是词法分析器的 Python 代码实现:
```python
import re
# 定义正则表达式
IDENTIFIER_REGEX = r'^[a-zA-Z][a-zA-Z0-9]*$'
NUMBER_REGEX = r'^\d+(\.\d+)?$'
OPERATOR_REGEX = r'^[+\-*/=]$'
PARENTHESIS_REGEX = r'^[\(\)]$'
SEMICOLON_REGEX = r'^;$'
def tokenize(input_string):
# 将输入字符串按空格分割成单词列表
words = input_string.split()
tokens = []
for word in words:
# 判断单词类型
if re.match(IDENTIFIER_REGEX, word):
tokens.append(('IDENTIFIER', word))
elif re.match(NUMBER_REGEX, word):
tokens.append(('NUMBER', word))
elif re.match(OPERATOR_REGEX, word):
tokens.append(('OPERATOR', word))
elif re.match(PARENTHESIS_REGEX, word):
tokens.append(('PARENTHESIS', word))
elif re.match(SEMICOLON_REGEX, word):
tokens.append(('SEMICOLON', word))
else:
raise ValueError(f'Invalid token: {word}')
return tokens
```
词法分析器的核心是正则表达式,它可以匹配不同类型的单词符号。在 `tokenize` 函数中,我们将输入字符串按空格分割成单词列表,然后遍历每个单词,判断其类型,并将其转换成一个元组,元组的第一个元素是单词的类型,第二个元素是单词本身。最后,将所有单词的元组组成一个列表返回给调用者。
例如,输入字符串为 `x = 123.45 ;`,则该词法分析器的输出为 `[('IDENTIFIER', 'x'), ('OPERATOR', '='), ('NUMBER', '123.45'), ('SEMICOLON', ';')]`。
阅读全文