语法分析器–c++

作者: Rememberautumn 分类: 未分类 发布时间: 2015-11-07 11:21 阅读: 3,822

简易语法分析器–c++

一、实验题目

对下述文法和单词表定义的语言设计编制一个语法分析器。

  • 单词符号及种别表

 

单词符号 种别编码 单词值
main 1
int 2
float 3
double 4
char 5
if 6
else 7
do 8
while 9
l(l|d)* 10 内部字符串
 ( +|-|ε ) dd*(.dd* | ε)( e ( +|-|ε ) dd*|ε) 20 二进制数值表示
= 21
+ 22
23
* 24
/ 25
( 26
) 27
{ 28
} 29
, 30
; 31
> 32
>= 33
< 34
<= 35
== 36
!= 37

 

  • 语法结构定义

<表达式> ::= <项>{ +<项>|-<项>}

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

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

num::= ( +|-|ε ) 数字数字*(.数字数字* | ε)( e ( +|-|ε ) 数字数字*|ε)

ID::=字母(字母|数字)*

字母::=a|b|c…|z|A|B|C…|Z

数字::=0|1|2…|9

 

二、实验目的

1、通过该实验,熟练应用编译原理的基本理论和方法

2、学会用C/C++高级程序设计语言设计一个语法分析器的技术

3、加深对编译原理的分析理论的理解,培养动手实践能力

 

三、实验要求

词法分析程序需具备语法分析的功能:

处理用户提交的符合上述文法的源代码序列,进行语法分析,并给出语法是否正确的结论。

例如:控制台输入d+-11.7e-17,经过语法分析后输出如下序列:

success!

例如:控制台输入(123.456+-456.789e-120)*m2+(a++456)*c123,经过语法分析后输出如下序列:

success!

例如:控制台输入(123.456+-456.789e-120)*m2+(a++456)*-c123,经过语法分析后输出如下序列:

error!

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注