📄 预测分析法.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>LL</title>
<script language="javascript">
NT=new Array();
T=new Array();
t=new Array();
stack=new Array(20);
M=new Array();
var row,line;
/*
NT=new Array('E','S','T','D','F');
T=new Array('i','+','*','(',')','#');
t=new Array('i','+','i','*','i','#');
stack=new Array(20);
M=new Array();
M[0]=new Array('TS','','','TS','','');
M[1]=new Array('','+TS','','','0','0');
M[2]=new Array('FD','','','FD','','');
M[3]=new Array('','0','*FD','','0','0');
M[4]=new Array('i','','','(E)','','');
var row,line;
*/
function value()
{
for(i=0;i<row;i++) M[i]=new Array();
for(i=0;i<=line;i++)
{
for(j=0;j<=row;j++)
{
if(i==0&&j==0) continue;
else if(j==0&&i>0) {lineN=eval('document.inputform.line'+(i-1)+'.value');NT[i-1]=lineN;}
else if(i==0&&j>0) {rowN=eval('document.inputform.row'+(j-1)+'.value');T[j-1]=rowN;}
else {Mij=eval('document.inputform.M'+(i*10+j-11)+'.value'); M[i-1][j-1]=Mij;}
}
}
st=document.inputform.st.value;
t=st.split('');
document.write('<table border=1>');
for(i=0;i<=line;i++)
{
for(j=0;j<=row;j++)
{
if(i==0&&j==0) document.write('<tr><td> ');
else if(j==0&&i>0) document.write('<tr><td>'+NT[i-1]);
else if(i==0&&j>0) document.write('<td>'+T[j-1]);
else document.write('<td>'+M[i-1][j-1]);
}
}
document.write('</table>');
document.write(t);
}
function isT(c)
{
//document.write('<br>function t');
for(i=0;i<T.length;i++)
if(c==T[i]) return true;
return false;
}
function isNT(c)
{
//document.write('<br>function nt');
for(i=0;i<NT.length;i++)
if(c==NT[i]) return true;
return false;
}
function toLine(c)
{
//document.write('<br>function line');
for(i=0;i<NT.length;i++)
if(c==NT[i]) return i;
}
function toRow(c)
{
//document.write('<br>function row');
for(i=0;i<T.length;i++)
if(c==T[i]) return i;
}
function analyze()
{
value();
var n=0;
var k=0;
var top=1;
stack[0]='#';stack[1]=NT[0];
document.write('<table border=1><tr><td>步骤<td>分析栈<td>剩余输入串<td>推导所用产生式或匹配');
while(1)
{
document.write('<tr><td>'+(++n)+'<td>');
for(i=0;i<=top;i++)
{
document.write(stack[i]);
}
document.write('<td>');
for(i=k;i<t.length;i++)
{
document.write(t[i]);
}
X=stack[top--];
document.write('<td>');
if(X=='#')
{
document.write('接受');
break;
}
if(isT(X))
{
//document.write('<br>isT');
document.write('"'+X+'"匹配');
k++;
}
if(isNT(X))
{
//document.write('<br>isNT');
line=toLine(X);
row=toRow(t[k]);
m=M[line][row];
m=m.split('');
document.write(X+'->');
for(i=0;i<m.length;i++)
{
document.write(m[i]);
}
for(i=m.length-1;i>=0;i--)
{
if(m[i]=='0') break;
stack[(++top)]=m[i];
}
}
}
document.write('</table>');
}
function input()
{
line=parseInt(document.indexform.line.value);
row=parseInt(document.indexform.row.value);
HTML='';
HTML+=('<form name=inputform ><table border=1>');
for(i=0;i<=line;i++)
{
for(j=0;j<=row;j++)
{
if(i==0&&j==0) HTML+=('<tr><td> ');
else if(j==0&&i>0) HTML+=('<tr><td><input type="text" size="4" name="line'+(i-1)+'"/>');
else if(i==0&&j>0) HTML+=('<td><input type="text" size="4" name="row'+(j-1)+'"/>');
else HTML+=('<td><input type="text" size="4" name="M'+(i*10+j-11)+'"/>');
}
}
HTML+=('</table>请输入要分析的串<input type="text" name=st /></form>');
HTML+=('<input type="button" onclick="analyze()" value="确定" />');
document.body.innerHTML=HTML;
}
</script>
</head>
<body >
<p>语法分析</p>
<form name="indexform" >
请输入预测分析表的行数
<input name='line' type="text" size="2" />
列数
<input type="text" name='row' size="2" />
<input type="button" value="确定" onclick="input()" />
</form>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -