资源简介
涉及词法分析、自下而上语法分析程序的实现:SLR(1)分析器的实现以及生成中间代码
代码片段和文件信息
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.lang.String.*;
class AA extends Jframe
{ int a=0;
int ii=-1;//状态栈的栈顶指针
int e=1;//记录错误数
int u=-1;//符号栈的栈顶指针
int h=-1;//控制中间变量的数组下表;
int y=-1;//语义栈的栈顶指针
int weizhi=-1;//符号表中符号的总数;
int i=0;//当把输入的表达式映射为数组,i为数组下标;
int ll=0;//如果输入的字符是不可识别,ll=1;如果是可识别的ll=0;
String s=“ “;
String kk=““;
String id;//记录识别出来的字符是标示符还是符号,值为i或*=...;
String iweizhi;//记录所识别出来的字在符号表里的位置。
String pp=““;//将符号表里的所有内容,全部取出付给pp便于查询;
String EplaceTplaceFplaceAplace;//记录ETFA的实际值,可以为abx或中间变量;
char lookhead;
int state_stack[]=new int[ 40];//状态栈
char symbol_stack[]=new char[40];//符号栈
String grammer_stack[]=new String[100];//语义栈
String name[]={“A““B““C““D““F““G““H““J““K““L““Q““T1““T2““T3““T4““T5““T6““T7““T8““T9““A1““A2““A3““A4““A5““A6“};//中间变量的值
char N[] ={‘+‘‘*‘‘i‘‘=‘‘(‘‘)‘‘#‘‘E‘‘F‘‘T‘‘A‘};//这个文法所能识别出的符号,相当于slr表里的行坐标
char grammer_right[][] ={{‘i‘‘=‘‘E‘} {‘E‘‘+‘‘T‘} {‘T‘} {‘T‘‘*‘‘F‘} {‘F‘} {‘(‘‘E‘‘)‘}{‘i‘} };
//每个产生式右边对应的符号
String iii;
JTextArea text1=new JTextArea();
int fenxi[][] ={ {-1 -1 2 -1-1 -1 -1 -1 -1-11} { -1 -1 -1 -1 -1-10 -1 -1 -1-1 } { -1 -1 -1 3-1 -1 -1 -1-1-1-1} { -1 -1 12 -1 9 -1 -1 41011 -1} { 5 -1 -1 -1 -1 -1 101-1-1-1-1}{-1-112-19-1-1-1106-1}{1027-1-1-1102102-1-1-1-1}{-1-112-19-1-1-18-1-1}{104104-1-1-1104104-1-1-1-1}{-1-112-19-1-1131011-1}{105105-1-1-1105105-1-1-1-1}{1037-1-1-1103103-1-1-1-1}{107107-1-1-1107107-1-1-1-1}{5-1-1-1-114-1-1-1-1-1}{106106-1-1-1106106-1-1-1-1}};
//*****************************************************************************
AA(JTextArea a)
{text1=a;}
//******************************输出结构*************************************************
int jianyan(char b)//寻找分析表的列坐标
{
int k=N.length;
for (int j = 0; j < k; j++)
{
if (b == N[j])
return j;
}
return -2;
}
void printz()//输出状态栈
{
for(int p=0;p<=ii;p++)
{
String pp=state_stack[p]+“ “;
text1.append(pp);
}
}
void printf()//输出符号栈
{
String h=“ “;
text1.append(h);
for(int p=0;p<=u;p++)
{
String pp=symbol_stack[p]+“ “;
text1.append(pp);
}
}
void printy()//输出语义栈
{
String h=“ “;
text1.append(h);
for(int p=0;p<=u;p++)
{
String pp=grammer_stack[p]+“ “;
text1.append(pp);
}
}
void print_grammer_right(int pvint bv)
//输出每个产生式右边;
{
for(int p=0;p {
Strin
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11099 2008-06-19 15:32 meng的编译课设\AA.class
文件 218624 2008-06-19 16:19 meng的编译课设\B05513 韩萌萌 28.doc
文件 90 2008-06-19 15:36 meng的编译课设\danciliubiao.doc
文件 13 2008-06-19 15:35 meng的编译课设\hello.txt
文件 3450 2008-06-19 15:32 meng的编译课设\JieMian.class
文件 332 2008-06-19 15:32 meng的编译课设\meng.class
文件 21614 2008-06-19 15:23 meng的编译课设\meng.java
文件 15 2008-06-19 15:36 meng的编译课设\符号表.doc
文件 308 2008-06-19 15:36 meng的编译课设\错误分析表.doc
目录 0 2009-06-17 09:33 meng的编译课设
----------- --------- ---------- ----- ----
255545 10
评论
共有 条评论