《编译原理》中好象学过,好长时间不用,忘了!
哦,比如说我输入的文法是:
A::=ab , B::=sd .然后要输出 A::=ab , B::=sd
其中 A,B是非终结字符,而a,b,s,d是终结字符,就这样,如果你知道,不妨说说看,谢谢
能不能把程序也顺便写出来了!
如果不涉及优先级的话应该不是很难吧,我试着写一下(非终结符为大写字母,终结符为小写字母)
#include <iostream>
#include<list>
using namespace std;
int main(int argc, char* argv[])
{
char c;
int daxie=0,xiaoxie=0;
list<char> lst;
cout<<"请输入表达式:\n";
do
{
cin.get(c);lst.push_back(c);
if(c>=0x41&&c<=0x5a) daxie++;
else if(c>=0x61&&c<=0x7a) xiaoxie++;
}while(c!='\n');
cout<<"您输入的表达式如下:\n";
list<char>::iterator h=lst.begin(),l=lst.end();
for(;h!=l;h++){cout<<*h;}
cout<<"其中终结符个数为:"<<xiaoxie<<";非终结符个数为:"<<daxie<<endl;
return 0;
}
ps:草草写过,不知道是否合乎要求,本人水平有限请如果不好用请不要见怪。
欢迎光临 编程论坛 (https://bbs.bccn.net/) | Powered by Discuz! 6.1.0 |