源代码的单词及其种别码如下: 类别 单词 编码 关键字 if 1 then 2 do 3 while 4 begin 5 end 6 标识符 以字母开头,后跟字母或者数字 7 常数 所有非负整数 8 运算符 + 9 - 10 * 11 / 12 = 13 > 14 < 15 界符 ; 16 ( 17 ) 18 { 19 } 20 2、采用你熟悉的语言编写,编写能够识别上面单词的词法分析程序。
时间: 2023-12-06 18:41:55 浏览: 146
以下是一个简单的词法分析程序的 Python 代码实现:
```python
import re
# 定义正则表达式
keywords = {'if': 1, 'then': 2, 'do': 3, 'while': 4, 'begin': 5, 'end': 6}
operators = {'+': 9, '-': 10, '*': 11, '/': 12, '=': 13, '>': 14, '<': 15}
delimiters = {';': 16, '(': 17, ')': 18, '{': 19, '}': 20}
regex_identifier = r'^[a-zA-Z][a-zA-Z0-9]*$'
regex_number = r'^\d+$'
# 读取输入文件
with open('input.txt', 'r') as f:
input_str = f.read()
# 定义词法分析结果列表
lex_result = []
# 分离单词
words = re.findall(r'[a-zA-Z0-9]+|[+\-*\/=><;(){}]', input_str)
# 逐个识别单词
for word in words:
# 检查是否为关键字
if word in keywords:
lex_result.append((keywords[word], word))
# 检查是否为运算符
elif word in operators:
lex_result.append((operators[word], word))
# 检查是否为界符
elif word in delimiters:
lex_result.append((delimiters[word], word))
# 检查是否为标识符
elif re.match(regex_identifier, word):
lex_result.append((7, word))
# 检查是否为常数
elif re.match(regex_number, word):
lex_result.append((8, int(word)))
# 无法识别的单词
else:
print(f'Error: Unrecognized word "{word}"')
# 输出词法分析结果
for token in lex_result:
print(token)
```
这个程序可以读取一个名为 `input.txt` 的文件,并逐个识别其中的单词,输出每个单词的种别码及其对应的值(如果有)。在程序中,我们使用了正则表达式来检查标识符和常数。对于无法识别的单词,程序会输出一个错误信息。
阅读全文