计算机系统综合课程设计-东南大学计算机科学与工程学院 联系客服

发布时间 : 星期六 文章计算机系统综合课程设计-东南大学计算机科学与工程学院更新完毕开始阅读9113080f178884868762caaedd3383c4bb4cb4d0

编写程序的语言的语法说明: 1、允许全局变量和函数局部变量,但一个函数内的变量在同一层次; 2、所有标识符只能是以字母打头,数字字母串,不能含有‘_’; 3、立即数可以是十进制或是以“0x”打头的十六进制; 4、循环语句允许有for、while、do...while,可以用continue、break; 5、不支持goto语句; 6、条件语句可以用if...else...,不能用switch...case...; 7、变量最多允许为一维,类型只能为有符号整型,不支持变量初始化; 8、函数可以有申明,返回类型为void或int,可以嵌套、递归调用; 9、允许空语句; 10、算术操作符有+、-、*、/、%、&(按位与)、|(按位或)、^(按位异与)、<<(左移)、>>(右移)、.(取变量的第几位,返回0、1)、-(负号); 11、逻辑操作符有&&、||、!; 12、关系运算符有<、>、<=、>=、!=、==; 13、支持变量后++,变量后--; 14、对端口操作可以用在端口号地址前加‘$’; 15、可以没有main()函数,中断处理函数的名称分别为“interuptServer0”和“interuptServer1;” 16、不允许用头文件,所有程序只能放在同一个文件中; 17、BIOS功能调用的函数名: 该程序生成的中间代码类似于汇编程序,但有所不同: 1、每条语句前可以有标号,必须是以‘L’打头,后面跟上十进制数;L0,L1都有特殊含义,L0是中断0跳转地址,L1是中断1跳转地址; 2、每条指令都是一个操作码加上三个操作数,中间不需要其他符号,操作数不够的后面补零; 3、只有一条伪指令“int”,相当于定义变量,可以在函数结构内定义局部变量,也可在函数外定义全局变量,以‘;’结束。操作数中出现的变量名就等价于立即数,值等于它的偏移量; 4、指令“j“”jal“”beq“”bne”后跟的是要跳转的地址处标号的值,而非跳转地址或偏移 ; 5、“lw“”sw”的后面的参数顺序与网页上的不同,将立即数放在了最后; 6、寄存器可以用‘$’后加数表示,也可以加寄存器名表示,即“$1”和“$at”等价; 7、立即数支持正、负,十进制、十六进制(以“0x”打头); 对于关键部分的程序可以在中间代码进行人工修改后在汇编翻译。 语法和词法: digit letter token decnum hexnum number var args funcal arifif arifor : [0-9] : [a-zA-Z] ; : letter token | letter ; : digit decnums | ; : digit | [1-9] decnums ; : [0-9a-f] hexnums | ; : '0x' hexnums ; : decnum | hexnum ; decnums hexnums : '$' arifif | token | token '[' ariexp ']' ; : ariexp ',' args | ariexp | ; : token '(' args ')' ; : var | funcal | '(' ariexp ')' | number ; : '-' arifif |arifif; arithi arifor; arisec ariexp relation logthi logsec logexp defvar defvars defsen empsen retsen assen forini forjudge fordo forsen whisen dowsen iffsen block fundec fundef function program : arithi '&' arifor | arithi '|' arifor | arithi '^' arifor | arithi '.' arifor | arithi '>>' arifor | arithi '<<' arifor | : arisec '*' arithi | arisec '/' arithi | arisec '%' arithi | arithi; : ariexp '+' arisec | ariexp '-' arisec | arisec; : ariexp '<' ariexp | ariexp '>' ariexp | ariexp '<=' ariexp | ariexp '>=' ariexp | ariexp '==' ariexp | ariexp : '!' logthi | '(' logexp ')' | relation ; : logsec '&&' logthi | logthi ; : logexp '||' logsec | logsec ; : token | token '[' number ']' ; : defvar ',' defvariables | defvar ; :'int' defvars ; : ';' ; : 'return' ariexp ; '!=' ariexp |'true' ; : var '=' ariexp | var '++' | var '--' ; : asssen | ; : logexp | ; : asssen | ; : 'for' '(' forini ';' forjudge ';' fordo ')' block ; : 'while' '(' logexp ')' block ; : 'do' block 'while' '(' logexp ')' ';' ; : 'if' '(' logexp ')' block | 'if' '(' logexp ')' block 'else' block ; : '{' sentence block '}' | sentence ; : rettype token '(' fundefvars ')' ';' ; : rettype token '(' fundefvars ')' '{' block '}' ; sentence : empsen | asssen ';' | forsen | whisen | dowsen | iffsen | defsen | funcal ';' |'break' ';' |'continue' ';' | retsen ; fundefvars : 'int' token ',' fundefvars | 'int' token | ; : fundef | fundec ; : wsentence program ; wsentence : defsen | function ; 本组设计中的BIOS使用手册