资源描述:
《小型编译系统》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、小型编译系统一、需求说明1.文法我的文法是扩充CO文法,等级是中偏高(编号:lKKh8),我申请获得优秀,以下是文法。红色字体表示是我在原文法基础上进行的扩充。V加法运算符〉:=+1-V乘法运算符〉V关系运算符〉<字母〉::二_:二*丨/:=<1<=1>1>=1!=1==_1aI...Iz1A1...IZ<数字〉::二0丨<非零数字〉V非零数字〉::=V字符〉::=V字符串>::二=11...19、<加法运算符〉丨V乘法运算符〉丨V字母〉丨V数字〉,、'{〈合法字符>}"//字符串中可以出现所有合法的可打印字符集中的字符V程序〉::=[V常量说明部分>]
2、[<变量说明部分〉]{<有返回值函数定义部分>}{V无返回值函数定义部分>}<主函数><常量说明部分〉::二constV常量定义>;{constV常量定义>;}<常量定义〉::二int<标识符>=<整数>{,<标识符>=<整数>}丨float<标识符>=<实数>{,V标识符>=<实数>}
3、charV标识符>=<字符>{,V标识符>=V字符>}V整数〉::=V实数〉::=V标识符〉:::V声明头部〉:V变量说明部分〉[+1—]V非零数字〉{V数字〉}丨0[+1-]<整数>[•〈整数〉]二<字母〉{V字母〉丨<数字>}:二int<标识符>
4、float<标识符
5、>charV标识符>::=〈变量定义>;{〈变量定义>;}V变量定义〉::二V类型标识符〉<标识符>{,<标识符>}<常量〉::二〈整数>
6、〈实数>
7、〈字符〉<类型标识符〉::二intfloatchar<有返回值函数定义部分〉::二<声明头部〉、(,<参数>'),、「<复合语句〉V无返回值函数定义部分〉::=void<标识符>'(Y参数〉'”、{,<复合语句〉'}「V复合语句〉::二[<常量说明部分〉][<变量说明部分〉]<语句列〉V参数〉::二V参数表〉<参数表〉:=<类型标识符><标识符>{,V类型标识符><标识符〉}丨空V主函数>::二voidma
8、in'(z<参数>'),'{z合语句>'},<表达式>:=[+丨一]<项>{<加法运算符><项>}V因子〉::=V标识符〉丨'(,<表达式>'”IV整数〉丨V有返回值函数调用语句>1〈实数>
9、v字符〉//返回值为Char型的函数和V字符〉,用字符的ASCII码参加计算<语句〉::二<条件语句〉丨v循环语句〉丨、{y语句列〉、“I<有返回值函数调用语句〉;丨<无返回值函数调用语句〉;丨<赋值语句〉;丨<do循环语句>;
10、〈for语句〉;
11、V读语句〉;丨V写语句〉;丨V空>丨<情况语句〉丨V返冋语句〉;V赋值语句>::=<标识符>=<表达式>V条件语句〉::
12、=if'条件>'),<语句〉[else<语句〉]<条件>::二<表达式><关系运算符>V表达式>丨<表达式>//表达式为0条件为假,否则为真V循环语句〉::二while'(z<条件>'),<语句〉Vdo循环语句>::二do<语句〉wh订e"(,<条件〉,)'vfoi•语句>::二for(Cv赋值语句〉;<条件〉;v赋值语句〉'),v语句〉V情况语句〉::=switch4C<表达式>)'{'<情况表>[<缺省〉]'}'V情况表>::二<情况子语句〉{<情况子语句>}<情况子语句>::二casc<常量〉:<语句〉<缺省〉::=default:<语句〉V有返回
13、值函数调用语句〉::=V标识符>,cv值参数表〉丁V无返回值函数调用语句〉::=V标识符>'('<值参数表〉')’<值参数表〉::=V表达式>{,V表达式>}丨<空><语句列〉::二<语句〉{<语句>}V读语句>::二scanf'('V标识符>')'V写语句〉::二printfUv字符串>,][<表达式>]丁<返回语句〉::=「etumrCV表达式>)]2•语法图程序复合语句语句列i_语句语句ident:表达式ident表达式printfscanfident表达式条件语句V语句语句While条件语句While条件forident表达式>条件▼ident—
14、►)>语句表达式switch语句return表达式表达式)情况情况表达式条件3・P-code指令系统伪指令数值代码LIT1解释:LIT0a〃a为常数值(整形、字符),将a的值装入数据栈栈顶,数据栈栈顶指针都加1〃常量LIT1a(double型)〃在解释执行时,要用到符号表〃a为存放此double型数据在符号表中的地址,将值装入数据栈栈顶,数据栈栈顶〃常数LIT(double型)〃在解释执行时,要用到符号表〃放到一个实常数的栈(real)OPR2解释:OPR00〃返回语句,用于函数结束的跳出OPR10〃返回语句,用于有返回值函数结束的跳出(整形.字符)OP
15、R20〃返回语句,用于有返回值函数结束的跳出(double型)OPR01〃对栈顶