📄 一个基于ll(1)文法的语法分析程序.htm
字号:
st;<BR>
st.init();
//初始化<BR>
st.push('#');
<BR>
st.push(Vn[0]);
//#与识别符号入栈<BR> j=0;<BR> h=1;<BR>
w=str[0];<BR>
cout<<"步骤
"<<"分析栈
"<<"剩余输入串
"<<" 所用产生式"<<ENDL;<BR />opt1:<BR>
cout<<H<<"??????????????? 显示步骤<br />
j++;<BR> w=str[j];<BR> goto
opt1;<BR> }<BR> else
<BR> error();<BR> }<BR> else
<BR> {<BR> if(X=='#')<BR>
{<BR> if(X==w)<BR> {
<BR>
cout<<"
"<<"接受!"<<ENDL<<ENDL;?????? <br />
}<BR> else<BR>
error();<BR> }<BR>
else <BR> {<BR>
p=location(X,Vn);<BR>
q=location(w,Vt);<BR> string
S("NULL");<BR>
if(M[p][q]==S)
//查找二维数组中的产生式<BR>
error();<BR>
else<BR> {
<BR> string
str0=M[p][q]; <BR>
cout<<"
"<<X<<"-->"<<STR0<<ENDL;?????? 显示对应的产生式<br
/> if(str0=="$")<BR> goto
opt1;<BR> else<BR> {length=str0.getlength();
//逆序进栈<BR>
for(m=length-1;m>=0;m--)<BR>
{<BR>
st.push(str0[m]);<BR>
}<BR> goto
opt1;<BR> }<BR>
<BR> }<BR> }<BR>
}<BR>}<BR>main()<BR>{ <BR> int i,k,n,r;<BR>
char Vn[100],Vt[100],select;<BR> string
M[100][100];<BR> cout<<"* 文件名称: 语法分析"<<ENDL;<BR
/> cout<<"* 摘 要:
对任意输入LL(1)文法的分析表及字符串,本程序能自动判断所给字符串是"<<ENDL;<BR />
cout<<"*
否为该文法的句子,并能给出分析过程。"<<ENDL;<BR />
cout<<"*--------------------------------------------------------------------*"<<ENDL;<BR
/> cout<<ENDL<<ENDL;<BR
/> opt2: <BR> cout<<"请输入非终结符个数:";<BR> cin>>n;<BR> cout<<"请输入终结符(#号表示结束)Vt:";<BR> for(i=0;i<100;i++)<BR> {<BR> cin>>Vt[i];<BR> if(Vt[i]=='#')<BR> {<BR> r=i;<BR> break;<BR> }<BR> }<BR>
for (i=0;i<N;I++)<BR
/> {<BR> cout<<"请输入非终结符Vn["<<i<<"]Vn:";<br></i<<"]Vn:";<br> cin>>Vn[i];<BR>
cout<<"请输入此非终结符对应各终结符的产生式右部,$表示空串:";
<BR> for(k=0;k<=r;k++)<BR> {<BR>
cin>>M[i][k];<BR> }<BR> }<BR>opt3:<BR>
cout<<"请输入要分析的字符串,且以#结束:";<BR> analyse(Vn, Vt,
M);<BR>
cout<<"
************************请选择***********************"<<ENDL;<BR
/>
cout<<"
1:
输入字符串"
<<ENDL;<BR />
cout<<"
2:
输入新分析表"
<<ENDL;<BR />
cout<<"
0: 退
出"
<<ENDL;<BR />opt4:<BR>
cin>>select;<BR>
switch(select)<BR> {<BR> case
'1': {goto opt3;break;}<BR> case '2':
{goto opt2;}<BR> case '0':
{break;}<BR> default:
{cout<<"输入错误!请重新选择:"<<ENDL;<BR
/> goto
opt4;<BR>
break;}<BR> }<BR> return
0;<BR>}<BR></P><B><BR><BR>版权声明:CSDN是本Blog托管服务提供商。如本文牵涉版权问题,CSDN不承担相关责任,请版权拥有者直接与文章作者联系解决。</B><BR></DIV>
<DIV class=postfoot>发表于 2004年07月11日 7:59 PM </DIV></DIV><LINK
href="http://blog.csdn.net/happyjyr/Services/Pingback.aspx" rel=pingback><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://blog.csdn.net/happyjyr/archive/2004/07/11/39184.aspx"
dc:identifier="http://blog.csdn.net/happyjyr/archive/2004/07/11/39184.aspx"
dc:title="一个基于LL(1)文法的语法分析程序"
trackback:ping="http://blog.csdn.net/happyjyr/services/trackbacks/39184.aspx" />
</rdf:RDF>
--><FONT face=宋体></FONT><BR>
<DIV id=comments>
<H3>评论</H3>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:一个基于LL(1)文法的语法分析程序"
href="http://blog.csdn.net/happyjyr/archive/2004/07/11/39184.aspx#39281">#</A> <A
name=39281></A>回复:一个基于LL(1)文法的语法分析程序 <SPAN>2004-07-11 10:59 PM </SPAN><A
id=Comments.ascx_CommentList__ctl0_NameLink target=_blank>seacloud</A> </DIV>
<DIV class=postText>stack和string为什么不用C++的标准类呢? <BR>毕竟你的工作主要是文法分析,而几乎有一半的代码
<BR>在处理stack和string. <BR><A id=Comments.ascx_CommentList__ctl0_EditLink
href="javascript:__doPostBack('Comments.ascx$CommentList$_ctl0$EditLink','')"></A></DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A title="permalink: 回复:一个基于LL(1)文法的语法分析程序"
href="http://blog.csdn.net/happyjyr/archive/2004/07/11/39184.aspx#39954">#</A> <A
name=39954></A>回复:一个基于LL(1)文法的语法分析程序 <SPAN>2004-07-12 9:17 PM </SPAN><A
id=Comments.ascx_CommentList__ctl1_NameLink target=_blank>happyjyr</A> </DIV>
<DIV
class=postText> 当时做这个程序的时候是刚刚接触C++,还不知道C++的标准类的使用,只好自己动手编制,这也是这个程序的最大的缺点.一直没有改动程序,谢谢提议,我会尽快做出改进.
<BR><A id=Comments.ascx_CommentList__ctl1_EditLink
href="javascript:__doPostBack('Comments.ascx$CommentList$_ctl1$EditLink','')"></A></DIV></DIV><BR></DIV></A>
<DIV class=CommentForm id=commentform>
<H3>发表评论</H3>
<TABLE class=CommentForm>
<TBODY>
<TR>
<TD width=75>标题:</TD>
<TD><INPUT id=PostComment.ascx_tbTitle style="WIDTH: 300px" size=40
value=回复:一个基于LL(1)文法的语法分析程序 name=PostComment.ascx:tbTitle> <SPAN
id=PostComment.ascx_RequiredFieldValidator1
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入标题"
controltovalidate="PostComment.ascx_tbTitle"><BR>请输入标题</SPAN> </TD></TR>
<TR>
<TD width=75>大名:</TD>
<TD><INPUT id=PostComment.ascx_tbName style="WIDTH: 300px" size=40
name=PostComment.ascx:tbName> <SPAN
id=PostComment.ascx_RequiredFieldValidator2
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入尊姓大名"
controltovalidate="PostComment.ascx_tbName"><BR>请输入尊姓大名</SPAN> </TD></TR>
<TR>
<TD>网址:</TD>
<TD><INPUT id=PostComment.ascx_tbUrl style="WIDTH: 300px" size=40
name=PostComment.ascx:tbUrl> </TD></TR>
<TR>
<TD colSpan=3>评论 <SPAN id=PostComment.ascx_RequiredFieldValidator3
style="DISPLAY: none; COLOR: red" initialvalue=""
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
display="Dynamic" errormessage="<br>请输入评论"
controltovalidate="PostComment.ascx_tbComment"><BR>请输入评论</SPAN> <BR><TEXTAREA id=PostComment.ascx_tbComment style="WIDTH: 381px; HEIGHT: 193px" name=PostComment.ascx:tbComment rows=10 cols=50></TEXTAREA>
</TD></TR>
<TR>
<TD colSpan=3><INPUT language=javascript class=Button id=PostComment.ascx_btnSubmit onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " type=submit value=提交 name=PostComment.ascx:btnSubmit>
<INPUT id=PostComment.ascx_chkRemember type=checkbox
name=PostComment.ascx:chkRemember><LABEL
for=PostComment.ascx_chkRemember>记住我?</LABEL></TD></TR>
<TR>
<TD><SPAN id=PostComment.ascx_Message
style="COLOR: red"></SPAN></TD></TR></TBODY></TABLE></DIV></DIV>
<P id=footer>Powered by: <BR><A id=Footer1_Hyperlink2
href="http://scottwater.com/blog" name=Hyperlink1><IMG alt=""
src="一个基于LL(1)文法的语法分析程序.files/100x30_Logo.gif" border=0></A> <A
id=Footer1_Hyperlink3 href="http://asp.net/" name=Hyperlink1><IMG alt=""
src="一个基于LL(1)文法的语法分析程序.files/PoweredByAsp.Net.gif" border=0></A> <BR>Copyright
© happyjyr </P>
<SCRIPT language=javascript type=text/javascript>
<!--
var Page_Validators = new Array(document.all["PostComment.ascx_RequiredFieldValidator1"], document.all["PostComment.ascx_RequiredFieldValidator2"], document.all["PostComment.ascx_RequiredFieldValidator3"]);
// -->
</SCRIPT>
<SCRIPT language=javascript type=text/javascript>
<!--
var Page_ValidationActive = false;
if (typeof(clientInformation) != "undefined" && clientInformation.appName.indexOf("Explorer") != -1) {
if ((typeof(Page_ValidationVer) != "undefined") && (Page_ValidationVer == "125"))
ValidatorOnLoad();
}
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
return true;
}
// -->
</SCRIPT>
</FORM></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -