资源简介

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1) 写出符合给定的语法分析方法的文法及属性文法。 (2) 完成题目要求的中间代码四元式的描述。 (3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 1 系统描述(问题域描述); 2 文法及属性文法的描述; 3 语法分析方法描述及语法分析表设计; 4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计; 6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果; 8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。

资源截图

代码片段和文件信息

#include   
#include   
#include 
#include
#include
#include  
using   namespace   std;   
//*******************************************************************  
/*文法
S->for(A){G}
A->D id P
D->E id O F
E->id=F
F->id
P->++|--
O-> <|>
G->GB
B->ID=S1
s1->TE1
T->FT1
E1->+TE1|&|-TE1
T1->*FT1|&|-TE1
X->B|&
*/


int colume=0;//词法分析当前行数
int *ERROR=new int [100];
int error=0;
int file_siyuan_cow=1;//四元式文件输出的行数
int row=0;//记录当前地址序列
int t=0;//临时变量标号
//字符串数组,保存词法分析后的连续单词
struct tableword
{
string word;
int type;//1表示ID,2表示数值常量,3表示字符常量,0表示其它
};
//单词序列 
tableword table_word[100];
  int tableword_length=0;
  int word_now=0;//

struct item
{
//int sequence;//四元式序号
string text;//四元式内容
//int type;//0表示出口地址栈,1表示循环栈,-1表示正常四元式
//string shift;//转移到的目标地址
};
item siyuanshi[100];
struct Stack
{
int size;
int length;
string *top;
string *base;
};

struct StackExit
{
int size;
int length;
int *top;
int *base;
};
  StackExit exit1;//出口栈
  Stack circle;//循环栈
  Stack operater;//预算副栈
  Stack operand;//操作数栈

//词法分析相关函数
bool Keyword(char cstring *KEYWORDint KNLengthifstream &infile);
bool Identify(char cifstream &infilestring &strtemp);
bool ConstN(char cifstream &infile);
bool ConstStr(char cifstream &infile);
bool ConstChar(char cifstream &infile);
bool ConstNum(char cifstream &infile);
bool Operator(char cifstream &infile);
bool Delimiter(char c );
int classfify(char c);
int classify_num(char c);


int read(tableword &word);

//栈的处理
void InitStack(Stack &stack);
void Push(Stack &stackstring strtemp);
void Pop(Stack &stackstring &stemp);
void Gettop(Stack &stackstring &stemp);

void InitStack(StackExit &stack);
void Push(StackExit &stackint temp);
void Pop(StackExit &stackint &temp);
void Gettop(StackExit &stackint &temp);

//*************************************************
//---------------语法语义函数
void receive(tableword &wordstring tempint type);
void S(tableword &word);
void A(tableword &word);
void E(tableword &word);
void D(tableword &word);
void O(tableword &word);
void P(tableword &word);
void G(tableword &word);
void B(tableword &word);
void S1(tableword &word);
void X(tableword &word);
void E1(tableword &word);
void T(tableword &word);
void T1(tableword &word);
void F(tableword &word);
//----------------------------------------------------

void emit(int rowstring strtemp);
string int_to_str(int n);
char Priority(string op1string op2 );
void Menu();
void Outtenspace(int space_number);
void output();
int main()
{
  //读出关键字
  string KEYWORD[80];
  int KNLength=0;
  ifstream inf(“KEYWORD.txt“ios::in);
  if(!inf){cout<<“error“;exit(1);}
  int i=0;
  while(inf>>KEYWORD[i])
  i++;
  KEYWORD[i]=“-1“;
  KNLength=i;
  inf.close();
  //********************************************
  //栈
    //初始化栈
  InitStack(exit1);
  InitStack(circle);
  InitStack(opera

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      31053  2010-01-08 09:33  for循环语句的翻译\for循环语句.cpp

     文件       3467  2010-01-08 09:59  for循环语句的翻译\for循环语句.dsp

     文件        530  2010-01-06 16:25  for循环语句的翻译\for循环语句.dsw

     文件        538  2010-01-07 14:20  for循环语句的翻译\KEYWORD.txt

     文件        157  2010-01-09 00:01  for循环语句的翻译\procedure.txt

     目录          0  2010-01-09 22:26  for循环语句的翻译

----------- ---------  ---------- -----  ----

                35745                    6


评论

共有 条评论