北航14年编译课设的编译器,中级,支持DOWHILE语句,FOR循环,不支持SWITCH 有点BUG程序内说明了,没改。不难改。 数组内不支持有标识符如a[i]。 技术有限,渣渣写成,给北航丢人了。 词法分析是先遍历一遍 再进行后续的其他分析,亲测这方法不好用,推荐书上的方法,一个一个读入一个一个分析。 大家加油。
2023-11-25 20:56:38 63KB c0文法 c语言版
1
学校大三课程的编译器设计实验作业,基于扩展c0文法的编译器设计,编译最终结果为MIPS代码,优化未做。包括源程序,说明文档,测试程序三部分。
2021-04-14 09:25:52 1.35MB 编译器
1
使用c语言完成的简单c0文法编译器的实现,文法为: <加法运算符> ::= +|- 1<乘法运算符>  ::= *|/ 1<关系运算符>  ::=  <||>=|!=|== 1<字母>   ::= _|a|...|z|A|...|Z 1<数字>   ::= 0|<非零数字> 1<非零数字>  ::= 1|...|9 <字符>    ::=   '<加法运算符>'|'<乘法运算符>'|'<字母>'|'<数字>' //字符不能为空 <字符串>   ::=  "{十进制编码为32,33,35-126的ASCII字符}" //字符串可以为空 <程序>    ::= [<常量说明>][<变量说明>]{<有返回值函数定义>|<无返回值函数定义>}<主函数> 1<常量说明> ::=  const<常量定义>;{ const<常量定义>;} 1<常量定义>   ::=   int<标识符>=<整数>{,<标识符>=<整数>}                             | char<标识符>=<字符>{,<标识符>=<字符>} 1<无符号整数>  ::= <非零数字>{<数字>} //无符号整数不能有0 1<整数>        ::= [+|-]<无符号整数>|0 //无符号整数属于整数 1<标识符>    ::=  <字母>{<字母>|<数字>} <声明头部>   ::=  int<标识符> |char<标识符> <变量说明>  ::= <变量定义>;{<变量定义>;} <变量定义>  ::= <类型标识符>(<标识符>|<标识符>‘[’<无符号整数>‘]’){,<标识符>|<标识符>‘[’<无符号整数>‘]’ } <常量>   ::=  <整数>|<字符> <类型标识符>      ::=  int | char <有返回值函数定义>  ::=  <声明头部>‘(’<参数>‘)’ ‘{’<复合语句>‘}’ <无返回值函数定义>  ::= void<标识符>‘(’<参数>‘)’‘{’<复合语句>‘}’ 1<复合语句>   ::=  [<常量说明>][<变量说明>]<语句列> 1<参数>    ::= <参数表> 1<参数表>    ::=  <类型标识符><标识符>{,<类型标识符><标识符>}|<空> 1<主函数>    ::= void main‘(’‘)’ ‘{’<复合语句>‘}’ 1<表达式>    ::= [+|-]<项>{<加法运算符><项>} 1<项>     ::= <因子>{<乘法运算符><因子>} 1<因子>    ::= <标识符>|<标识符>‘[’<表达式>‘]’|<整数>|<字符>|<有返回值函数调用语句>|‘(’<表达式>‘)’   <有返回值函数调用语句> ::= <标识符>‘(’<值参数表>‘)’        <语句>    ::= <条件语句>|<循环语句>| ‘{’<语句列>‘}’|<有返回值函数调用语句>;                        | <无返回值函数调用语句>;|<赋值语句>;|<读语句>;|<写语句>;|<空>;|<情况语句>|<返回语句>; <赋值语句>   ::=  <标识符>=<表达式>|<标识符>‘[’<表达式>‘]’=<表达式> <条件语句>  ::=  if ‘(’<条件>‘)’<语句>[else<语句>] <条件>    ::=  <表达式><关系运算符><表达式>|<表达式> //表达式为0条件为假,否则为真 <循环语句>   ::=  for‘(’<标识符>=<表达式>;<条件>;<标识符>=<标识符>(+|-)<步长>‘)’<语句> <步长>    ::=  <非零数字>{<数字>} <情况语句>  ::=  switch ‘(’<表达式>‘)’ ‘{’<情况表><缺省>‘}’ <情况表>   ::=  <情况子语句>{<情况子语句>} <情况子语句>  ::=  case<常量>:<语句> <缺省>   ::=  default : <语句> <无返回值函数调用语句> ::= <标识符>‘(’<值参数表>‘)’ <值参数表>   ::= <表达式>{,<表达式>}|<空> <语句列>   ::= {<语句>}//出现多次或0次ET <读语句>    ::=  scanf ‘(’<标识符>{,<标识符>}‘)’ <写语句>    ::= printf ‘(’ <字符串>,<表达式> ‘)’| printf ‘(’<字符串> ‘)’| printf ‘(’<表达式>‘)’ <返回语句>   ::=  return[‘(’<表达式>‘)’]
2020-04-04 00:05:38 20KB compiler
1
用于北航本科编译原理与技术课程参考资料。资源内为C++语言实现的C0文法编译器源码,通过文件读取源程序,实现了词法分析,语法分析,语义分析,和执行等功能。vs2012编译通过。
2019-12-21 21:26:23 12KB 编译 C0 compiler 北航
1
C0文法,包含原始文法、文法解读、详细设计文档、申优文档、测试程序。因为看到之前有学弟?抱怨没有文档,所以特意上传。 http://download.csdn.net/detail/hahajinbu/8457691 配合这个使用,效果更佳。仅限参考,一切后果自负。
2019-12-21 19:49:55 824KB 北航 编译
1