📄 一个基于ll(1)文法的语法分析程序.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0059)http://blog.csdn.net/happyjyr/archive/2004/07/11/39184.aspx -->
<HTML xmlns:i<<"]Vn><HEAD><TITLE>一个基于LL(1)文法的语法分析程序</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.2600.0" name=GENERATOR><LINK media=all
href="一个基于LL(1)文法的语法分析程序.files/style.css" type=text/css rel=stylesheet><LINK
media=print href="一个基于LL(1)文法的语法分析程序.files/print.css" type=text/css
rel=stylesheet><LINK title=RSS href="http://blog.csdn.net/happyjyr/rss.aspx"
type=application/rss+xml rel=alternate></HEAD>
<BODY>
<FORM language=javascript id=Form1 name=Form1
onsubmit="if (!ValidatorOnSubmit()) return false;" action=39184.aspx
method=post><INPUT type=hidden name=__EVENTTARGET> <INPUT type=hidden
name=__EVENTARGUMENT> <INPUT type=hidden name=__VIEWSTATE>
<SCRIPT language=javascript type=text/javascript>
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = document.Form1;
}
else {
theform = document.forms["Form1"];
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</SCRIPT>
<SCRIPT language=javascript src="一个基于LL(1)文法的语法分析程序.files/WebUIValidation.js"
type=text/javascript></SCRIPT>
<DIV id=top>
<DIV>
<TABLE>
<TBODY>
<TR>
<TD class=HeaderTitles>
<H1><A class=headermaintitle id=Header1_HeaderTitle
href="http://blog.csdn.net/happyjyr/">happyjyr的专栏</A></H1>
<P id=tagline></P></TD></TR></TBODY></TABLE></DIV>
<DIV class=HeaderBar>
<TABLE class=HeaderBar id=HeaderBar>
<TBODY>
<TR>
<TD class=HeaderBarTab noWrap> <A id=Header1_MyLinks1_HomeLink
title=到聚合站点 href="http://blog.csdn.net/">CSDNBlog</A> |
<A id=Header1_MyLinks1_ContactLink accessKey=9
href="http://blog.csdn.net/happyjyr/contact.aspx">联络</A> |
<A id=Header1_MyLinks1_Syndication
href="http://blog.csdn.net/happyjyr/Rss.aspx">聚合</A> <A class=XMLLink
id=Header1_MyLinks1_XMLLink
href="http://blog.csdn.net/happyjyr/Rss.aspx"><IMG alt=""
src="一个基于LL(1)文法的语法分析程序.files/xml.gif" border=0></A> | <A
id=Header1_MyLinks1_Admin
href="http://blog.csdn.net/happyjyr/login.aspx">登录</A> <IMG
id=Header1_BlueTab alt="" src="一个基于LL(1)文法的语法分析程序.files/BlueTabRight.jpg"
align=absMiddle border=0> </TD>
<TD class=HeaderBarTabBack noWrap width="100%">
<DIV class=BlogStatsBar>
<TABLE class=BlogStatsBar>
<TBODY>
<TR>
<TD width="100%"></TD>
<TD class=BlogStatsBar noWrap> 9 篇文章 |
2 篇收藏 | 3
个评论 | 0 个Trackbacks
</TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV id=leftmenu>
<H3>文章</H3>
<UL>
<LI><A id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl1_Link
href="http://blog.csdn.net/happyjyr/category/23586.aspx">About Me</A> <A
id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl1_RssLink
title="订阅了About Me"
href="http://blog.csdn.net/happyjyr/category/23586.aspx/rss">(rss)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl2_Link
href="http://blog.csdn.net/happyjyr/category/23303.aspx">web编程学习中</A> <A
id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl2_RssLink
title=订阅了web编程学习中
href="http://blog.csdn.net/happyjyr/category/23303.aspx/rss">(rss)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl3_Link
href="http://blog.csdn.net/happyjyr/category/23300.aspx">大学生活</A> <A
id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl3_RssLink title=订阅了大学生活
href="http://blog.csdn.net/happyjyr/category/23300.aspx/rss">(rss)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl4_Link
href="http://blog.csdn.net/happyjyr/category/23313.aspx">我的程序</A> <A
id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl4_RssLink title=订阅了我的程序
href="http://blog.csdn.net/happyjyr/category/23313.aspx/rss">(rss)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl5_Link
href="http://blog.csdn.net/happyjyr/category/23299.aspx">挚爱的vc</A> <A
id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl5_RssLink
title=订阅了挚爱的vc
href="http://blog.csdn.net/happyjyr/category/23299.aspx/rss">(rss)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl6_Link
href="http://blog.csdn.net/happyjyr/category/23302.aspx">最后的暑假</A> <A
id=SingleColumn1_Categories_CatList__ctl0_LinkList__ctl6_RssLink
title=订阅了最后的暑假
href="http://blog.csdn.net/happyjyr/category/23302.aspx/rss">(rss)</A>
</LI></UL>
<H3>收藏</H3>
<UL>
<LI><A id=SingleColumn1_Categories_CatList__ctl1_LinkList__ctl1_Link
href="http://blog.csdn.net/happyjyr/category/23309.aspx">01的世界</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl1_LinkList__ctl2_Link
href="http://blog.csdn.net/happyjyr/category/23307.aspx">操作系统</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl1_LinkList__ctl3_Link
href="http://blog.csdn.net/happyjyr/category/23308.aspx">精彩美文</A> </LI></UL>
<H3>存档</H3>
<UL>
<LI><A id=SingleColumn1_Categories_CatList__ctl2_LinkList__ctl1_Link
href="http://blog.csdn.net/happyjyr/archive/2004/10.aspx">2004年10月 (1)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl2_LinkList__ctl2_Link
href="http://blog.csdn.net/happyjyr/archive/2004/09.aspx">2004年09月 (1)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl2_LinkList__ctl3_Link
href="http://blog.csdn.net/happyjyr/archive/2004/08.aspx">2004年08月 (1)</A>
<LI><A id=SingleColumn1_Categories_CatList__ctl2_LinkList__ctl4_Link
href="http://blog.csdn.net/happyjyr/archive/2004/07.aspx">2004年07月 (6)</A>
</LI></UL><BR><BR></DIV>
<DIV id=main>
<DIV class=post>
<DIV class=postTitle><A id=viewpost.ascx_TitleUrl
href="http://blog.csdn.net/happyjyr/archive/2004/07/11/39184.aspx">一个基于LL(1)文法的语法分析程序</A>
</DIV>
<DIV class=postText>
<P>这是编译课程设计时做的一个小小的语法分析程序,程序有些冗余.实现的功能还不全,只能通过输入文法的分析表才能给出分析过程.对于求任意文法的first集和follow集还没实现.</P>
<P>/*<BR> * 文件名称: 语法分析.h<BR> * 摘 要:
对任意输入LL(1)文法的分析表及字符串,本程序能自动判断所给字符串是<BR> *
否为该文法的句子,并能给出分析过程。<BR>*/<BR>#include<IOSTREAM.H><BR>#include<STRING.H><BR>#include<STDIO.H><BR>#include"ctype.h"<BR>class
string;<BR>class stack<BR>{<BR> char stck[100];<BR> int
top;<BR>public:<BR> void init()<BR> {top=0;}<BR> void push(char
ch);<BR> char pop();<BR> void
showstck();
//显示栈中元素<BR>};<BR>class string{<BR> int length;<BR> char
*ptr;<BR>public: <BR> string();<BR> ~string()<BR> {
}<BR> string(char *s);<BR> int getlength();<BR> int
getlength(char *s);<BR> char
&operator[](int);<BR> string &operator=(const string
&ob);<BR> bool operator== (const string&
pw);<BR> friend ostream&
operator<<(ostream&,const string&);<BR> friend istream&
operator>>(istream&,string&);<BR>};<BR>void stack::push(char
ch)
//入栈<BR>{ <BR> stck[top]=ch;<BR> top++;<BR>}<BR>char
stack::pop()<BR>{ <BR> if(top==0)<BR> {<BR>
cout<<"stack is empty!";<BR> return
0;<BR> }<BR> top--;<BR> return stck[top];<BR>}<BR>void
stack::showstck()<BR>{<BR> int i;<BR> for(i=0;i<TOP;I++)<BR
/> cout<<STCK[I];<BR
/>}<BR>string::string()<BR>{
length=1;<BR> ptr=new
char[1];<BR> *ptr='\0';<BR>}<BR>string::string(char
*s)<BR>{ ptr=new char[getlength(s)+1];<BR>
strcpy(ptr,s);<BR>
length=getlength(s)+1;<BR>}<BR>int string::getlength()<BR>{<BR> int
len;<BR> len=getlength(ptr);<BR> return len;<BR>}<BR>int
string::getlength(char *s)<BR>{ int i=0;<BR> while(s[i]!='\0')<BR>
{i++;<BR> }<BR> return i;<BR>}<BR>char &string::operator[](int
j)<BR>{<BR> return ptr[j];<BR>} <BR>string &string::operator
=(const string &ob)
//重载‘=’运算符<BR>{if(this==&ob)<BR> return *this;<BR> delete
ptr;<BR> ptr=new char[getlength(ob.ptr)+1];<BR>
length=getlength(ob.ptr)+1;<BR> strcpy(ptr,ob.ptr);<BR> return
*this;<BR>}<BR>bool string::operator== (const string &pw)
<BR>{<BR> if(*ptr==*pw.ptr)<BR> return
true;<BR> else<BR> return false;<BR>} <BR>ostream&
operator<<(ostream&s,const
string&ob)<BR>{<BR> s<<OB.PTR;<BR /> return
s;<BR>}<BR>istream& operator>>(istream&in,string&ob)<BR>{
<BR> in>>ob.ptr ;<BR> return in; <BR>}<BR>bool
find(char c,char array[]
)
//查找函数,返回布尔值<BR>{ <BR> int i;<BR> bool
flag=false;<BR> for(i=0;i<100;i++)<BR> {<BR> if(c==array[i])<BR>
flag=true;<BR> }<BR> return flag;<BR>}<BR>int location(char c,char
array[])
//定位函数,指出字符所在位置<BR>{<BR> int
i;<BR> for(i=0;i<100;i++)<BR> {<BR> if(c==array[i])<BR> return
i;<BR> }<BR>}<BR>void error()<BR>{<BR>
cout<<"
出错!"<<ENDL;<BR />}<BR>void analyse(char Vn[],char Vt[],string
M[100][100])<BR>{<BR> int i,j,m,p,q,length,t,h;<BR> char
w,X;<BR> string str;<BR>opt0:<BR>
cin>>str;<BR> for(i=0;i<STR.GETLENGTH();I++)<BR />
{<BR> if(!find(str[i],Vt))<BR> {
cout<<"输入字符串有误!请重新输入!"<<ENDL;<BR /> goto
opt0;<BR> break;}<BR> }<BR> stack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -