C-Minus词法分析报告四川大学编译原理 联系客服

发布时间 : 星期二 文章C-Minus词法分析报告四川大学编译原理更新完毕开始阅读3f5a9d52db38376baf1ffc4ffe4733687e21fc89

实用标准

四 川 大 学 计 算 机 学 院、软 件 学 院

实 验 报 告

学号 姓名: 专业:

课程名称 编译原理课程设计 实验课时 4 实验项目 手工构造C-Minus语言的词法分析器 实验时间 1. 熟悉C-Minus语言的词法特点,构造C-Minus的DFA; 2. 设计数据类型、数据结构 3. 通过完成词法分析程序,巩固词法分析知识 注释:/*注释*/ 关键字:if else int return void while 实验目的、意义 语言特点 正则表达式 专用符号:+ - * / <<= >>= == != = ; , [ ] ( ) { } ID = letter+ NUM = digit+ letter = [a-z,A-Z] digit = [0-9] 文案大全

实用标准

DFA //定义数据类型TokenType typedef enum {ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE, ID,NUM, ASSIGN,EQ,LT,LE,GT,GE,NEQ,PLUS,MINUS,TIMES,OVER,LPAREN, 数据类型 数据结构设计 RPAREN,LBRACKET,RBRACKET,LBRACE,RBRACE,COMMA,SEMI } TokenType; //定义状态类型 typedef enum { START,LBUFFER,RBUFFER,INCOMMENT,INNUM,INID,INEQ,INLE,INGE,INNEQ,DONE }StateType; //结构定义 文案大全

实用标准

static struct { char *str; TokenType tok; } reservedWords[MAXRESERVED] ={{\},{\双层CASE实现代码映射,外层CASE关注状态变换,内层CASE关注输入字符。 外层CASE一共有12个状态:START,LBUFFER,RBUFFER,INCOMMENT,INNUM,INID,INEQ,INLE,INGE,INNEQ,DONE, default; 内层CASE判断getNextChar()获取的下一个字符使当前状态转换为其他状态。 TokenType getToken(void) { int tokenStringIndex=0; 关键代码分析 case START:{ TokenType currentToken; StateType state=START; int save; //是否保存到tokenString while(state!=DONE) { int c=getNextChar(); save=TRUE; switch(state) { DFA代码映射方法 文案大全

实用标准

if(isdigit(c)) state=INNUM; else if(isalpha(c)) state=INID; else if((c==' ') || (c=='\\t') || (c=='\\n')) save=FALSE; else if(c=='=') state=INEQ; else if(c=='<') state=INLE; else if(c=='>') state=INGE; else if(c=='!') state=INNEQ; else if(c=='/') state=LBUFFER; else { state=DONE; switch(c) { case EOF: save=FALSE; 文案大全