手机版

c_c++语法分析器(4)

发布时间:2021-06-06   来源:未知    
字号:

1. LL(1)实现 自顶向下预测分析(方法二)

(1)消除文法左递归。

文法改写为:

E TE'

E' TE'| TE'| T FT'

T' *FT'|/FT'| F id|(E)|num

(2)画出状态图得

化简得

(3)FIRST集和FOLLOW集如下: FIRST(E)={id,(,num} FIRST(E’)={+,-,ε} FIRST(T)={id,(,num} FIRST(T’)={ *,/,ε} FIRST(F)={id,(,num}

(4)LL(1)分析表构造如图

:

FOLLOW(E)={},$} FOLLOW(E’)={},$} FOLLOW(T)={},+,-,$} FOLLOW(T’)={},+,-,$} FOLLOW(F)={},+,-,*,/,$}

(5)C++程序代码解析:

预置字符串类型预测分析表:

(””表示空白对应错误处理的跳过操作,”em”表示ε正常跳过,”s”表示synch对应错误处理的弹栈操作) string analyze_chart[6][10]={

"NULL", "+", "-", "*", "/", "id", "(", ")", "num", "$", "E", "", "", "", "", "TE'", "TE'", "s", "TE'", "s", "E'", "+TE'","-TE'","", "", "", "", "em", "", "em", "T", "s", "s", "", "", "FT'", "FT'", "s", "FT'", "s", "T'", "em", "em", "*FT'","/FT'","", "", "em", "", "em",

"F", "s", "s", "s", "s", "id", "(E)", "s", "num", "s" };

int searchl(string target)返回对应分析表中的行号 int searchr(char target)返回对应分析表中的列号

预测分析程序主体,输入参数target为待分析的记号流指针,用字符指针存储,length为字符串长度 void syntax_analyzing(const char * target,int length) 内部参数:

int ptr=0,line,row;其中ptr为记号流指针,line为预测分析表查找行号,row为预测分析表查找列号 string temp;此处temp为暂存变量,存储栈顶弹出的元素 stack<std::string> a_stack;字符串类型栈 (6)程序运行效果截图 正确记号流:

错误记号流:

c_c++语法分析器(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)