📄 pl.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 + -