天津理工大学编译原理实验2:语法分析.docVIP

  • 73
  • 0
  • 约1.1万字
  • 约 13页
  • 2017-04-04 发布于江苏
  • 举报

天津理工大学编译原理实验2:语法分析.doc

天津理工大学编译原理实验2:语法分析

实验报告 学院(系)名称:计算机与通信工程学院 姓名 学号 专业 班级 实验项目 实验二:语法分析 课程名称 编译原理 课程代码 实验时间 2016年4月21日 第1、2节 2016年4月26日 第3、4节 2016年4月28日 第1、2节 实验地点 计算机软件实验室7-220 批改意见 成绩 教师签字: 实验内容: 可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法分析器: (1)E→E+T | E-T | T (2)T→T*F | T/F | F (3)F→P^F | P (4)P→(E) | i 实验目的: 1.掌握语法分析的基本概念和基本方法; 2.正确理解LL1分析法、算符优先分析法、LR分析法的设计与使用方法。 实验要求 使用的是LL(1)分析法,其分析表的构造方法和构造过程如下: 实验源代码: #includeiostream #includecstring #define size 1024 using namespace std; int getLength(char str[size]) { int i=0; while(str[i]!=\0) i++; return i; } int getstringLength(string str) { int i=0; while(str[i]!=\0) i++; return i; } char gettop(char stack[size],int top) { if(stack[top]!=\0) return stack[top]; else return #; } void popstack(char *stack,int *pointer) { int p=*pointer; cout\tPopup stack[p] out!; stack[p]=\0; (*pointer)--; } void pushstack(char *stack,int *pointer,string str) { int i=0; int length=getstringLength(str); cout push str in stack reversed order.; for(i=length-1;i=0;i--) { (*pointer)++; stack[(*pointer)]=str[i]; } } int getcol(char top) { switch(top) { case +: return 0; case -: return 1; case *: return 2; case /: return 3; case ^: return 4; case ): return 5; case #: return 6; case (: return 7; case i: return 8; default: coutError! This character string is not this grammer`s sentence.endl; return -1; } } void show(char str[size],int index) { int length=getLength(str); if(index!=-1) cout\t; for(int i=index+1;ilength;i++) coutstr[i]; } int main() { char str[size];//接受字符串的数组 char stack[size];//进行比对的栈 int pointer=-1;//指向栈顶的指针 int length=0;//记录字符串长度 int index=0;//记录输入字符串 char top; int i,j;//i表示行,j表示列 string production; bool match=false; string table[7][9]={ // + - * / ^ ) # ( i /* E */ error, error, error, error, error, error, error, TX, TX, /* X */ +TX, -TX, error, error, error, empty, e

文档评论(0)

1亿VIP精品文档

相关文档