《编译技术》课程设计文档.docx
- 文档编号:1102223
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:31
- 大小:110.40KB
《编译技术》课程设计文档.docx
《《编译技术》课程设计文档.docx》由会员分享,可在线阅读,更多相关《《编译技术》课程设计文档.docx(31页珍藏版)》请在冰豆网上搜索。
《编译技术》课程设计文档
《编译技术》课程设计文档
学号:
_________________
姓名:
____________________
2015年1月8日
一.需求说明
1.文法说明
原始文法
<加法运算符>:
:
=+|-
<乘法运算符>:
:
=*|/
<关系运算符>:
:
=<|<=|>|>=|!
=|==
<字母>:
:
=_|a|...|z|A|...|Z
<数字>:
:
=0|<非零数字>
<非零数字>:
:
=1|...|9
<字符>:
:
='<加法运算符>'|'<乘法运算符>'|'<字母>'|'<数字>'
<字符串>:
:
="{十进制编码为32,33,35-126的ASCII字符}"
<程序>:
:
=[<常量说明>][<变量说明>]{<有返回值函数定义>|<无返回值函数定义>}<主函数>
<常量说明>:
:
=const<常量定义>;{const<常量定义>;}
<常量定义>:
:
=int<标识符>=<整数>{,<标识符>=<整数>}
|char<标识符>=<字符>{,<标识符>=<字符>}
<无符号整数>:
:
=<非零数字>{<数字>}
<整数>:
:
=[+|-]<无符号整数>|0
<标识符>:
:
=<字母>{<字母>|<数字>}
<声明头部>:
:
=int<标识符>|char<标识符>
<变量说明>:
:
=<变量定义>;{<变量定义>;}
<变量定义>:
:
=<类型标识符>(<标识符>|<标识符>‘[’<无符号整数>‘]’){,(<标识符>|<标识符>‘[’<无符号整数>‘]’)}/////不许在定义变量时赋初值.
<常量>:
:
=<整数>|<字符>
<类型标识符>:
:
=int|char
<有返回值函数定义>:
:
=<声明头部>‘(’<参数>‘)’‘{’<复合语句>‘}’
<无返回值函数定义>:
:
=void<标识符>‘(’<参数>‘)’‘{’<复合语句>‘}’
<复合语句>:
:
=[<常量说明>][<变量说明>]<语句列>
<参数>:
:
=<参数表>
<参数表>:
:
=<类型标识符><标识符>{,<类型标识符><标识符>}|<空>
<主函数>:
:
=voidmain‘(’‘)’‘{’<复合语句>‘}’
<表达式>:
:
=[+|-]<项>{<加法运算符><项>}
<项>:
:
=<因子>{<乘法运算符><因子>}
<因子>:
:
=<标识符>|<标识符>‘[’<表达式>‘]’|<整数>|<字符>|<有返回值函数调用语句>|‘(’<表达式>‘)’
<语句>:
:
=<条件语句>|<循环语句>|‘{’<语句列>‘}’|<有返回值函数调用语句>;|<无返回值函数调用语句>;|<赋值语句>;|<读语句>;|<写语句>;|<空>;|<情况语句>|<返回语句>;
<赋值语句>:
:
=<标识符>=<表达式>|<标识符>‘[’<表达式>‘]’=<表达式>
<条件语句>:
:
=if‘(’<条件>‘)’<语句>[else<语句>]
<条件>:
:
=<表达式><关系运算符><表达式>|<表达式>//表达式为0条件为假,否则为真
<循环语句>:
:
=while‘(’<条件>‘)’<语句>
<情况语句>:
:
=switch‘(’<表达式>‘)’‘{’<情况表>‘}’
<情况表>:
:
=<情况子语句>{<情况子语句>}
<情况子语句>:
:
=case<常量>:
<语句>
<有返回值函数调用语句>:
:
=<标识符>‘(’<值参数表>‘)’
<无返回值函数调用语句>:
:
=<标识符>‘(’<值参数表>‘)’
<值参数表>:
:
=<表达式>{,<表达式>}|<空>
<语句列>:
:
={<语句>}
<读语句>:
:
=scanf‘(’<标识符>{,<标识符>}‘)’
<写语句>:
:
=printf‘(’<字符串>,<表达式>‘)’|printf‘(’<字符串>‘)’|printf‘(’<表达式>‘)’
<返回语句>:
:
=return[‘(’<表达式>‘)’]
文法解读说明及举例:
<加法运算符> :
:
=+|-
/*加法运算符由+号、-号组成*/
范例:
略
分析:
略
<乘法运算符> :
:
=*|/
/*乘法运算符由*号、/号组成*/
范例:
略
分析:
略
<关系运算符> :
:
= <|<=|>|>=|!
=|==
/*关系运算符由<、<=、>、>=、!
=、==组成*/
范例:
略
分析:
略
<字母> :
:
=_|a|...|z|A|...|Z
/*字母由下划线与大小写字母组成*/
范例:
略
分析:
略
<数字> :
:
=0|<非零数字>
/*数字由0、<非零数字组成>*/举例:
0|1…|9,记为number
范例:
0
分析:
数字包含了所有的单个的数字,不同于整数
<非零数字> :
:
=1|...|9
/*非零数字由1~9组成*/
分析:
非零数字也是单个的数字,但是不含0。
<字符> :
:
= '<加法运算符>'|'<乘法运算符>'|'<字母>'|'<数字>'
/*字符包含加法运算符、乘法运算符、字母、数字?
记为character*/
范例:
’+’,’-’,’*’,’/’等单字符
分析:
必须添加单引号,必须是单个的!
注意和字符串的区分
<字符串> :
:
= "{十进制编码为32,33,35-126的ASCII字符}"
/*规定合法的字符串,必须要用双引号括起来,记为chstring*/
范例:
“abc”
分析:
略
<程序> :
:
=[<常量说明>][<变量说明>]{<有返回值函数定义>|<无返回值函数定义>}<主函数>
/*程序组成部分包含常量说明、变量说明、有返回值函数定义、无返回值函数定义、主函数,主函数过后整个程序结束*/
范例以及说明:
constinta=1,b=1;/*常量说明部分
constcharc=’a’;*/
inta_1;/*变量说明部分
charc_1;*//*在这里定义和说明的常量变量都是全局的*/
intfun1(inta,intb){
XXXX
return1;/*有返回值的函数定义必须要有返回值*/
}
voidfun2(){/*无返回值的函数定义*/
return;
}
Voidmain(){/**/
XXXXX
Return;//虽然从文法上可以推导出void可以返回return0,不过语法上应该检查对不对
}
分析:
不能随便改变顺序,例如把函数的定义放在全局变量或者全局常量的前面的做法是不对的。
常量说明,变量说明以及函数定义都可有可无,但是主函数是必要的。
<常量说明> :
:
= const<常量定义>;{const<常量定义>;}
/*常量说明的标志是const*,constinta1=1/
分析:
可以一个可以多个,不同类型的const中间用分号隔开。
<常量定义> :
:
= int<标识符>=<整数>{,<标识符>=<整数>}
|char<标识符>=<字符>{,<标识符>=<字符>}
/*常量定义为inta1=12或者charc=’a’,允许连续定义,如inta=1,b=2*/
<无符号整数> :
:
=<非零数字>{<数字>}
/*无符号整数举例:
10,11,12,13,14,不能以0开头,前面不能有正负号,不能为0,usignedinterger*/
<整数> :
:
=[+|-]<无符号整数>|0
/*整数在无符号整数前添加正负号,也可以不带+|-,也包含了0,记为interger/
<标识符> :
:
= <字母>{<字母>|<数字>}
/*标示符由字母开头,可以纯字母,可以加上数字编号,记为ident*/
<声明头部> :
:
= int<标识符>|char<标识符>
/*函数定义的声明头部为inta开头,但是因为是函数定义所以紧跟在后的是括号(和变量说明部分开始一样,但是要注意区分!
)*/
<变量说明> :
:
= <变量定义>;{<变量定义>;}
/*变量说明由一个或多个变量定义组成,多个变量定义之间由分号隔开*/
<变量定义> :
:
=<类型标识符>(<标识符>|<标识符>‘[’<无符号整数>‘]’){,(<标识符>|<标识符>‘[’<无符号整数>‘]’)}
/*举例:
inta1,ax[2],ax3,ax[4]*/
分析:
允许多个,必须要有标识符。
<常量> :
:
= <整数>|<字符>
/*常量为整数或者字符*/
举例:
112,’a’.
分析:
略
<类型标识符> :
:
= int| char
/*类型标识符为int或者char,用在变量定义的开头*/
分析:
略
<有返回值函数定义> :
:
= <声明头部>‘(’<参数>‘)’‘{’<复合语句>‘}’
/*有返回值的函数定义格式为声明头部(参数){复合语句},举例intfunction(inta,intb){xxxxx}*/
分析:
有返回值的函数定义,return的时候必须要有值,因为有值,所以有返回值的函数在被调用的时候也可以作为因子。
<无返回值函数定义> :
:
= void<标识符>‘(’<参数>‘)’‘{’<复合语句>‘}’
/*无返回值的函数定义格式为声明头部(参数){复合语句},举例voidfunction(inta,intb){xxxxx}*/
分析:
void函数无返回值,但是从语法上来讲不会报错,应该从语义分析上进行报错。
<复合语句> :
:
= [<常量说明>][<变量说明>]<语句列>
/*复合语句包含0~多个常量说明,0~多个变量说明,语句列,举例:
constinta=1,intb,XXXXX*/
分析:
其实每一个符合语句就是平时写的程序里面的函数过后的{}内部的内容,这样一说是不是就好理解得多了呢?
<参数> :
:
= <参数表>
/*参数即为参数表*/
<参数表> :
:
= <类型标识符><标识符>{,<类型标识符><标识符>}|<空>
/*参数表举例:
inta,intb*/
或者就是空,什么都没有
分析:
主要用在涉及到函数的声明定义以及调用传参里面(所以可以为空)
<主函数> :
:
= voidmain‘(’‘)’‘{’<复合语句>‘}’
/*voidmain(){XXXX}*/
XXXX即为复合语句
分析:
主函数是程序必须的元素,整个程序只允许出现一个主函数,并且,如果主函数分析完毕,则整个编译程序分析完毕
<表达式> :
:
=[+|-]<项>{<加法运算符><项>}
/*表达式由项(一个项或者多个项)加上加法运算符组成,前面可以添加正负号*/
范例:
a+b,a*b+c*d,a+(b+c)
分析:
每一个表达式其实是有值的,可以用来进行赋值或者进行条件判断
<项> :
:
=<因子>{<乘法运算符><因子>}
/*项由因子(一个或者多个)乘除运算符组成*/
范例:
a*b,a,(a+b)*c,a/c
分析:
因子与因子之间的链接符号只能为乘法运算符*或者/
<因子> :
:
=<标识符>|<标识符>‘[’<表达式>‘]’|<整数>|<字符>|<有返回值函数调用语句>|‘(’<表达式>‘)’
/*因子包含的内容有:
indent,indent[表达式],123等整数,’c’等字符,call(a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译技术 编译 技术 课程设计 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)