语法分析思路

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

语法分析

C2.1 实验目的

编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析. C2.2 实验要求

利用C语言编制递归下降分析程序,并对简单语言进行语法分析.

C2.2.1待分析的简单语言的语法

用扩充的BNF表示如下:

(1)<程序>::=begin<语句串>end

(2)<语句串>::=<语句>{;<语句>}

(3)<语句>::=<赋值语句>

(4)<赋值语句>::=ID:=<表达式>

(5)<表达式>::=<项>{+<项> | —项>}

(6)<项>::=<因子>{*<因子> | /<因子>}

(7)<因子>::=ID | NUM | (<表达式>)

C2。2。2实验要求说明

输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”.

例如:

置初值

调用scaner读下一个单词符号

调用lrParser

结束图c.3语法分析主程序示意图

输入begin a:=9;x:=2*3;b:=a+x end #

输出success

输入x:=a+b*c end #

输出error

C2.3语法分析程序的算法思想

(1)主程序示意图如图C。3所示。

(2)递归下降分析程序示意图如图C。4所示。

(3)语句串分析过程示意图如图C。5所示。

(4)statement语句分析函数流程如图C.6. C.7. C.8 C.9所示。

是否begin?

调用scaner

调用语句串分析函数

是否end?

调用scaner

syn=0&&kk=0?

打印分析成功否是

出错处理是

图c.4递归下降分析程序示意图

否是

调用statement 函数

是否;?

调用scaner

调用statement 函数

出错处理

图c.5语句串分析示意图

图c.6statement语句分析函数示意图

图c.7 expression表达式分析函数示意图

图c.8term 分析函数示意图

是否标识符?

是否整常数

是否?

调用scaner

是否)?

调用scaner 出错处理否否

调用expression 函数

是是是

调用scaner

图c.9factor分析过程示意图

C2.4语法分析程序的C语言程序框架

lrparser()

{ if(syn=1)

{ 读下一个单词符号;

调用yucu函数;

if(syn=6)

{ 读下一个单词符号;

if(syn=0 &&(kk==0))

输出(“success”);

}

else {if(kk!=1) 输出’缺endl ’错误;kk=1;} else {输出‘ begin’错误;kk=1; }

return;

}

yucu()

{调用statement();

while(syn=26)

{ 读下一个单词符号;

调用statement函数;

return;

}

statement()

{ if(syn=10)

{ 读下一个单词符号;

if(syn=18)

{读下一个单词符号;

调用expression函数;

else {输出赋值号错误;kk=1;} }

else{输出语句错误;kk=1}

return;

}

expression()

{ 调用term函数;

while(syn=13 or 14)

{ 读下一个单词符号;

调用term函数;

return;

term()

{ 调用factor函数;

while(syn=15 or 16)

{ 读下一个单词符号;

调用factor函数;

return;

}

factor()

{ if(syn=10 or 11)

读下一个单词符号;

else if (syn=27)

{ 读下一个单词符号;

调用expression函数;

if(syn=28)

读下一个单词符号;

else { 输出’ )’错误;kk=1;} }

else {输出表达式错误;kk=1;}

return;

}

相关文档
最新文档