⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 预测分析法.html

📁 编译原理的几个课堂实验报告,极力推荐--对广大在校学生是个很好的借鉴材料,读别人东西也是学习嘛
💻 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 + -