一、程序总体结构
- 声明实现定义的变量
- 先构造Fist集合、Follow集合、分析预测表
- 进行词法分析,以二元组的形式输出
- 将输出的二元组抽离标识符ID、运算符、无符号整数NUM抽离出来组成一个字符串。
- 传入自顶向下分析函数进行分析
- 传入LL分析函数
二、说明各专题程序的关系
- 专题一 :将输入的程序进行词法分析,把标识符ID、运算符、无符号整数NUM抽离出来组成一个字符串。
- 专题二:把处理好的字符串传入专题二的函数中,进行自顶向下的分析
- 专题三:把处理好的字符串传入专题三-七的函数中,进行自下向上的LL分析
各个专题详情请看曾经的文章
三、测试用例
输入
输出
代码
# -*- coding: utf-8 -*-
import string
import re
print('词法分析器')
# 关键词
key = ('begin', 'end', 'if', 'then', 'else',
'for', 'while', 'do', 'and', 'or', 'not')
# 分界符
delimiters = ('(', ')', ';', '',)
# 运算符
operator = ('+', '-', '*', '/', '++', '--', # 算术运算符
'>', '<', '>=', '<=', '=', # 关系运算符
':=', # 赋值运算符
'<>', # 不等关系
':',
)
token = []
flage=1
# 去掉注释,获取文件
flag = 1
#__________________________________________________________________________________________________
def E():
T()
E1()
print("E ->TE’")
#E’→ATE’|ε
def E1():
global index
if (strx[index]=="+" or strx[index]=="-" ):
A()
T()
E1()
print("E’→ATE’")
# A → + | -
def A():
global index
if(strx[index]=="+"):
index += 1
print('A → + ')
else:
index += 1
print('A → - ')
def T():
F()
T1()
print('T→FT’')
# F→(E) | i
def F():
global index
global flag
if (strx[index] == "i"):
index += 1
print("F→i")
elif strx[index]=='(':
index += 1
E()
if strx[index]==')':
index += 1
print("F->(E)")
else:
flag = 0
print("分析失败")
else:
flag = 0
print("分析失败")
# T’→MFT’ |ε
def T1():
global index
if (strx[index]=="*" or strx[index]=="/" ):
M()
F()
T1()
print(