主题:[讨论]求编译器,各位帮帮忙
大家好,我们这个学期的编译原理课程设计要求每个人独立完成一个小型编译器,我自己实在是写不出来,请各位哥哥姐姐帮小弟一个忙啊,感激不尽。
要求是
:《编译技术》课程设计---C0文法 (编号:At02P)
根据下面的文法实现编译器,产生某虚拟计算机的目标代码,并编写解释执行程序,对该目标代码进行解释执行,输出解释执行结果。
<加法运算符> ::= +|-
<乘法运算符> ::= * |/
<关系运算符> ::= <|<=|>|>=|!=|==
<字符> ::= _|a|...|z|A|...|Z
<数字> ::= 0|1|...|9
<字符串> ::= "{<合法字符> }"
//字符串中可以出现所有合法的可打印字符集中的字符
<程序> ::= [<常量说明部分>][<变量说明部分>]{<子函数定义部分>}<主函数>
<常量说明部分> ::= const<常量定义>{,<常量定义>};
<常量定义> ::= <标识符>=<整数>
<整数> ::= [+|-]<数字>{<数字>}
<标识符> ::= <字符>{<字符>|<数字>}
<声明头部> ::= int <标识符>
<变量说明部分> ::= <声明头部>{,<标识符>};
<子函数定义部分> ::= (<声明头部>|void <标识符>)<参数><复合语句>
<复合语句> ::= ‘{’[<常量说明部分>][<变量说明部分>]<语句序列>‘}’
<参数> ::= ‘(’<参数表>‘)’
<参数表> ::= int<标识符>{,int<标识符>} | 空
<主函数> ::= (void |int) main <参数><复合语句>
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<项> ::= <因子>{<乘法运算符><因子>}
<因子> ::= <标识符>|‘(’<表达式>‘)’|<整数>|<子函数调用语句>
<语句> ::= <条件语句>|<循环语句>|‘{’<语句序列>‘}’|<子函数调用语句>;
|<赋值语句>; | <返回语句>;|<读语句>;|<写语句>;|<空>
<赋值语句> ::= <标识符>=<表达式>
<条件语句> ::= if‘(’<条件>‘)’<语句>[else<语句>]
<条件> ::= <表达式><关系运算符><表达式>|<表达式>
<循环语句> ::= while‘(’<条件>‘)’<语句>
<子函数调用语句> ::= <标识符>‘(’<值参数表>‘)’
<值参数表> ::= <表达式>{,<表达式>}|<空>
<语句序列> ::= <语句>{<语句>}
<读语句> ::= scanf‘(’<标识符>‘)’
<写语句> ::= printf‘(’[<字符串>,][<表达式>]‘)’
<返回语句> ::= return [ ‘(’<表达式>’)’ ]
要求是
:《编译技术》课程设计---C0文法 (编号:At02P)
根据下面的文法实现编译器,产生某虚拟计算机的目标代码,并编写解释执行程序,对该目标代码进行解释执行,输出解释执行结果。
<加法运算符> ::= +|-
<乘法运算符> ::= * |/
<关系运算符> ::= <|<=|>|>=|!=|==
<字符> ::= _|a|...|z|A|...|Z
<数字> ::= 0|1|...|9
<字符串> ::= "{<合法字符> }"
//字符串中可以出现所有合法的可打印字符集中的字符
<程序> ::= [<常量说明部分>][<变量说明部分>]{<子函数定义部分>}<主函数>
<常量说明部分> ::= const<常量定义>{,<常量定义>};
<常量定义> ::= <标识符>=<整数>
<整数> ::= [+|-]<数字>{<数字>}
<标识符> ::= <字符>{<字符>|<数字>}
<声明头部> ::= int <标识符>
<变量说明部分> ::= <声明头部>{,<标识符>};
<子函数定义部分> ::= (<声明头部>|void <标识符>)<参数><复合语句>
<复合语句> ::= ‘{’[<常量说明部分>][<变量说明部分>]<语句序列>‘}’
<参数> ::= ‘(’<参数表>‘)’
<参数表> ::= int<标识符>{,int<标识符>} | 空
<主函数> ::= (void |int) main <参数><复合语句>
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<项> ::= <因子>{<乘法运算符><因子>}
<因子> ::= <标识符>|‘(’<表达式>‘)’|<整数>|<子函数调用语句>
<语句> ::= <条件语句>|<循环语句>|‘{’<语句序列>‘}’|<子函数调用语句>;
|<赋值语句>; | <返回语句>;|<读语句>;|<写语句>;|<空>
<赋值语句> ::= <标识符>=<表达式>
<条件语句> ::= if‘(’<条件>‘)’<语句>[else<语句>]
<条件> ::= <表达式><关系运算符><表达式>|<表达式>
<循环语句> ::= while‘(’<条件>‘)’<语句>
<子函数调用语句> ::= <标识符>‘(’<值参数表>‘)’
<值参数表> ::= <表达式>{,<表达式>}|<空>
<语句序列> ::= <语句>{<语句>}
<读语句> ::= scanf‘(’<标识符>‘)’
<写语句> ::= printf‘(’[<字符串>,][<表达式>]‘)’
<返回语句> ::= return [ ‘(’<表达式>’)’ ]