源代码的单词及其种别码如下: 类别 单词 编码 关键字 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、采用你熟悉的语言编写,编写能够识别上面单词的词法分析程序。1.写出你设计词法分析程序的过程
时间: 2023-12-03 13:46:29 浏览: 103
编译原理词法分析和语法分析报告+代码(C语言版)[1].doc
设计词法分析程序的过程一般包括以下步骤:
1. 确定程序输入:词法分析程序的输入是源代码文本。
2. 确定程序输出:词法分析程序的输出是识别出的单词及其种别码。
3. 确定单词的种类和识别规则:根据题目中给出的单词,确定每个单词的种类及其识别规则,例如关键字、标识符、常数、运算符、界符等。
4. 编写程序逻辑:根据单词的识别规则,编写程序逻辑实现单词的识别,包括对单词的字符进行扫描、判断单词种类、记录单词种别码等操作。
5. 进行测试:使用多组不同的源代码文本进行测试,检查程序是否能够正确地识别出单词及其种别码。
以下是一个能够识别上述单词的词法分析程序的 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}
identifier = 7
constant = 8
# 定义识别规则
keyword_pattern = '|'.join([re.escape(keyword) for keyword in keywords])
operator_pattern = '|'.join([re.escape(operator) for operator in operators])
delimiter_pattern = '|'.join([re.escape(delimiter) for delimiter in delimiters])
identifier_pattern = '[a-zA-Z][a-zA-Z0-9]*'
constant_pattern = '\d+'
pattern = '|'.join([keyword_pattern, operator_pattern, delimiter_pattern, identifier_pattern, constant_pattern])
# 读入源代码文本
with open('source_code.txt', 'r') as f:
source_code = f.read()
# 逐个匹配单词并输出种别码
for match in re.finditer(pattern, source_code):
word = match.group()
if word in keywords:
print(word, keywords[word])
elif word in operators:
print(word, operators[word])
elif word in delimiters:
print(word, delimiters[word])
elif re.match(identifier_pattern, word):
print(word, identifier)
elif re.match(constant_pattern, word):
print(word, constant)
```
阅读全文