⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pl.cpp

📁 这是我们学校平时实习的四个内容:词法分析、递归下降子程序、ll1语法分析、lr0语法分析 是我用c++编写的。
💻 CPP
字号:
//朱贺 民航学院
#include<iostream.h>
#include<stdlib.h>

char in,*current,instr[20];//当前读入字符,当前指针位置,待测字符串
void ReadChar();
void Advance();
void Func_E();
void Func_T();
void Func_E1();
void Func_F();
void Func_T1();
void Func_P();
void Func_F1();
void Error();

void ReadChar()//从输入文件中读入一个字符
{
 in=*current;
 if(in=='#')//若为#号则视为结束符,返回
{
 return;
}
}

void Advance()
{
	current++;

}

void Func_E()
{
  Func_T();
  Func_E1();
}

void Func_T()
{
 Func_F();
 Func_T1();
}

void Func_E1()
{
 ReadChar();
 if(in=='+')
 {
  Advance();
  Func_E();
 }
}

void Func_F()
{
 Func_P();
 Func_F1();
}

void Func_T1()
{
 ReadChar();
 if(in=='('||in=='a'||in=='b'||in=='^')
 Func_T();
}

void Func_P()
{
 ReadChar();
 if(in=='a'||in=='b'||in=='^')
    Advance();
 else if(in=='(')
  {
   Advance();
   Func_E();
   ReadChar();
   if(in==')')
   Advance();
   else Error();
  }
 else Error();
}

void Func_F1()
{
 ReadChar();
 if(in=='*')
 {
  Advance();
  Func_F1();
 }
}

void Error()
{cout<<"错误!";
 exit(0);
}


void main()
{   
	int i=0;
	cout<<"参照文法为:\n"<<"(1)E→T+E\n"<<"(2)T→F(T|FaT|FbT|F^T\n"<<"(3)F→P|*F\n"\
      <<"(4)P→ab^|(E)\n";
	cout<<"请输入待测字符串:(以#结束)\n";
    do{
	cin>>instr[i++];
	}while(instr[i-1]!='#');
    instr[i]='\0';
	current=instr;
    Func_E();
    cout<<"分析成功!\n";
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -