c_c++语法分析器(4)

时间:2025-02-21

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文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219