Board logo

标题: 哪位大虾帮帮忙! [打印本页]

作者: jack_zheng    时间: 2004-9-16 18:02     标题: 哪位大虾帮帮忙!

大虾好!我是一个初学者,我想请教一个文法的实现问题。如果你知道,我就先谢谢了!
我们老师叫我编个程序实现:输入一个或者几个文法,然后将它输出,并且统计其中的终
结字符,以及非终结字符。大哥知道的话,不妨告诉小弟一下,谢谢了!我真的不会啊!
在线等待!

作者: jack_zheng    时间: 2004-9-16 18:08

大哥,捧个场塞,小弟我很急要啊!
作者: 中国人    时间: 2004-9-16 18:11

文法是什么,好象以前在《编译原理》学过。能具体解释解释吗?
作者: kuangjingbo    时间: 2004-9-16 18:21

《编译原理》中好象学过,好长时间不用,忘了!


作者: jack_zheng    时间: 2004-9-16 18:30

哦,比如说我输入的文法是:

A::=ab , B::=sd .然后要输出 A::=ab , B::=sd

其中 A,B是非终结字符,而a,b,s,d是终结字符,就这样,如果你知道,不妨说说看,谢谢

能不能把程序也顺便写出来了!


作者: 中国人    时间: 2004-9-16 18:39

终结符和非终结符的定义是什么?
作者: jack_zheng    时间: 2004-9-16 19:52

反正形如ASDKF的就是非终结符,而形如dskfjsidfasdde 的就是终结符
作者: ffll518    时间: 2004-9-17 11:52

如果不涉及优先级的话应该不是很难吧,我试着写一下(非终结符为大写字母,终结符为小写字母)

#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