• 大小: 1.25MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-09
  • 语言: 其他
  • 标签: c++  

资源简介

1、 理解自底向上语法分析方法; 2、 用LR分析技术实现语法分析器; 3、 熟练掌握LR分析程序的构造方法。

资源截图

代码片段和文件信息

#include 
#include
#include 
#include
#include 
#include 
using namespace std;
string temp[20];
int c;
ofstream out(“output.txt“ios::app);
string output;

void  ReadDataFromFileLBLIntoString()
{
    string total = ““;
    int i = 0;
    ifstream fin( “input.txt“ ); 
    while(fin.good() && i < 20){
        getline(fintemp[i]);
        total += temp[i]; 
        i++;
c=i;
    }
}

char input[10];                 
void inputcode(string x){
for(int m=0;m{
input[m]=x[m];
}
}


string action[12] [6]={
{“s5“ “error““error“ “s4“ “error“ “error“} 
{“error““s6“ “error“ “error“ “error““acc“}
{“error““r2“ “s7“ “error“ “r2““r2“}
{“error“ “r4““r4““error““r4““r4“}
{“s5““error“ “error““s4““error“ “error“}
{“error““r6““r6““error““r6““r6“}
{“s5“ “error““error“ “s4“ “error““error“}
{“s5“ “error““error“ “s4“ “error“ “error“}
{“error““s6“ “error““error“ “s11““error“}
{“error““r1“ “r7““error“ “r1 ““r1“}
{“eror““r3“ “r3“ “error““r3““r3“}
{“eror““r5“ “r5“ “error““r5““r5“}
};

string go[12][3]={
{“1““2““3“}
{“error““error““error“}
{“error““error““error“}
{“error““error““error“}
{“8““2““3“}
{“error““error““error“}
{“error““9““3“}
{“error““error““10“}
{“error““error““error“}
{“error““error““error“}
{“error““error““error“}
{“error““error““error“}
};

char Vt[6]={‘i‘‘+‘‘*‘‘(‘‘)‘‘#‘};
string LR[6]={“E->E+T““E->T““T->T*F““T->F““F->(E)““F->i“};
stackS;                     
stackX;                     

int num(string s){   //判断字符串中的数字           
int i;
string str=““;
for(int j=0;j if(s[j]>=‘0‘&&s[j]<=‘9‘)
str=str+s[j];
}
i=atoi(str.c_str());
return i;
}

//剩余输入串的输出
void print(int ichar*c)
{
for(int j=i;j<10;j++){
cout< out < }

cout<<‘\t‘;
out <<‘\t‘<}

//查找终结符
int same(char a){      
for(int i=0;i<6;i++){
if(a==Vt[i])
return i;
}
}


void analyse(string x){
    bool flag=true; //循环条件   
int step=1point=0state=0;  //步骤 指针 状态
char ch1ch2;
int mnl;     //用于判断终结符,分析表,表达式右部的长度 
string str1;   //用于判断对应分析表中的符号
string  str2=“#“str3=“0“;   //记录符号栈、状态栈中的所有元素
inputcode(x);
X.push(‘#‘);
S.push(0);

cout<<“步骤“<<‘\t‘<<“状态栈“<<‘\t‘<<“符号栈“<<‘\t‘<<“输入串        “<<‘\t‘<<“动作“< out <<“步骤“<<‘\t‘<<“状态栈“<<‘\t‘<<“符号栈“<<‘\t‘<<“输入串        “<<‘\t‘<<“动作“<< output << endl; 
out < cout<  
print(pointinput);
cout<<“初始化“< out<<“初始化“<
while(flag)
{
state=S.top();
ch1=input[point];
m=same(ch1);
str1=action[state][m];


if(str1[0]==‘s‘)
{
n=num(str1);
S.push(n);
X.push(ch1);
str2=str2+ch1;
ch2=n+48;
str3=str3+ch2;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-05 19:14  自底向上语法分析--LR分析\
     文件       38912  2018-12-05 19:14  自底向上语法分析--LR分析\4实验四 自底向上语法分析--LR分析.doc
     目录           0  2018-12-02 11:06  自底向上语法分析--LR分析\Debug\
     文件      598101  2018-12-02 11:06  自底向上语法分析--LR分析\Debug\LR分析.exe
     文件      845624  2018-12-02 11:06  自底向上语法分析--LR分析\Debug\LR分析.ilk
     文件      398160  2018-12-02 11:06  自底向上语法分析--LR分析\Debug\LR分析.obj
     文件     2391428  2018-11-29 00:32  自底向上语法分析--LR分析\Debug\LR分析.pch
     文件     1180672  2018-12-02 11:06  自底向上语法分析--LR分析\Debug\LR分析.pdb
     文件       91136  2018-12-02 11:06  自底向上语法分析--LR分析\Debug\vc60.idb
     文件      126976  2018-12-02 11:06  自底向上语法分析--LR分析\Debug\vc60.pdb
     文件          56  2018-11-29 01:29  自底向上语法分析--LR分析\input.txt
     文件        4778  2018-12-02 10:20  自底向上语法分析--LR分析\LR分析.cpp
     文件       42447  2018-12-05 19:13  自底向上语法分析--LR分析\LR分析.docx
     文件        3403  2018-12-02 11:06  自底向上语法分析--LR分析\LR分析.dsp
     文件         537  2018-12-02 11:06  自底向上语法分析--LR分析\LR分析.dsw
     文件       41984  2018-12-02 11:06  自底向上语法分析--LR分析\LR分析.ncb
     文件       48640  2018-12-02 11:06  自底向上语法分析--LR分析\LR分析.opt
     文件        1300  2018-12-02 11:06  自底向上语法分析--LR分析\LR分析.plg
     文件       13716  2018-12-02 11:06  自底向上语法分析--LR分析\output.txt

评论

共有 条评论