实验三 语义分析 实习报告_实验三语义分析报告

2020-02-28 实习报告 下载本文

实验三 语义分析 实习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验三语义分析报告”。

实验三 语义分析

一、实习目的通过上机实习,加深对语法制时翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。

二、实习要求

采用递归下降语法制导翻译法对算术表达式、赋值语句、条件语句、循环语句进行语义分析生成四元式序列。

三、实习过程

实习代码;/** * JavaCC file */

options {

JDK_VERSION = “1.5”;

static=false;} PARSER_BEGIN(whileParse)package whileparse;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.ArrayList;public cla whileParse {

public int count=0;/*四元式标号*/

public static ArrayList sysList = new ArrayList();

public int ncount=0;/*临时变量下标*/

public static void main(String args[])throws ParseException {

FileInputStream fileStream;try {

fileStream = new FileInputStream(“data/test.c”);

whileParse parser = new whileParse(fileStream);

System.out.println(“Reading from standard input...”);

System.out.println(“Enter c programe only main()with only while();” :“);

try {

switch(parser.start()){

case 0:

System.out.println(”OK.“);

break;

case 1:

System.out.println(”Goodbye.“);

break;

default:

break;

}

for(int i = 0;i

System.out.println(sysList.get(i));

}

} catch(Exception e){

System.out.println(”NOK.“);

System.out.println(e.getMeage());

parser.ReInit(System.in);

} catch(Error e){

System.out.println(”Oops.“);

System.out.println(e.getMeage());

} } catch(FileNotFoundException e1){

e1.printStackTrace();}

} } PARSER_END(whileParse)

SKIP : {

” “ | ”r“ | ”t“ | ”n“ | }

TOKEN : /* OPERATORS */ { | | | }

TOKEN : {)+ > |

}

TOKEN: {

|

|

|

|

|

| | }

TOKEN: { ”> | | =“> | }

TOKEN: {

|

|

|

|

| }

int start(): {} {

Procedure(){ return 0;} |

{ return 1;} }

/*处理主程序*/ void Procedure():{} {

(Content())* }

void Content():{} { WhileStatement()|IfStatement()}

void WhileStatement(): {

Token node;

int j1;

int next;

Sys newsys;} {

{

next=count+1;

}

Condition()

{

count++;

j1=count;

newsys = new Sys(count+”“,”J“,”_“, ”_“, j1+”#“);

sysList.add(newsys);

}

((WhileStatement()|IfStatement())*)*

{

count++;

newsys = new Sys(count+”“,”J“,”_“, ”_“, next+”“);

sysList.add(newsys);

EditSys.huitian(sysList, j1+”#“, count+1+”“);

} }

void IfStatement(): {

Token node;

int j1;

int next;

Sys newsys;} {

{

next=count+1;

}

Condition()

{

count++;

j1=count;

newsys = new Sys(count+”“,”J“,”_“, ”_“, j1+”#“);

sysList.add(newsys);

}

((IfStatement()|WhileStatement())*)*

{

count++;

newsys = new Sys(count+”“,”J“,”_“, ”_“, next+”“);

sysList.add(newsys);

EditSys.huitian(sysList, j1+”#“, count+1+”“);

} }

String Expreion(): {

String first;

String middle;

String temp=”“;

Sys newsys;} {

first=Term()

{

temp=first;

}

(middle=Term(){

count++;

temp=”T“+ncount;

ncount++;

newsys = new Sys(count+”“,”+“,first,middle,temp);

sysList.add(newsys);

first = temp;

//first=Integer.parseInt(first)+Integer.parseInt(middle)+”“;

}

| middle=Term(){

count++;

temp=”T“+ncount;

ncount++;

newsys = new Sys(count+”“,”-“,first,middle,temp);

sysList.add(newsys);

first = temp;

//first=Integer.parseInt(first)-Integer.parseInt(middle)+”“;

})*

{

return temp;

//return first;

} }

String Term(): {

String first;

String middle;

String temp=”“;

Sys newsys;} {

first=unary()

{

temp=first;

}

((middle= unary()

{

count++;

temp=”T“+ncount;

ncount++;

newsys = new Sys(count+”“,”*“,first,middle,temp);

sysList.add(newsys);

first = temp;

//first=Integer.parseInt(first)*Integer.parseInt(middle)+”“;

}

| middle=unary()

{

count++;

temp=”T“+ncount;

ncount++;

newsys = new Sys(count+”“,”/“,first,middle,temp);

sysList.add(newsys);

first = temp;

//first=Integer.parseInt(first)/Integer.parseInt(middle)+”“;

}))*

{

return temp;

//return first;

} }

String unary(): { String str;} { // str= element(){return-Double.parseDouble(str)+”“;} str= element(){return str;} }

String element(): { String str;Token node;} {

node={return node.image;} | str=Expreion(){return str;} }

int Condition(): {

Token node;

int next;

String first;

String middle;

Sys newsys;} {

first=Expreion()(node=”

{

count++;

next=count+1;

newsys = new Sys(count+“”,“j

sysList.add(newsys);

}

| node=”>“ middle=Expreion()

{

count++;

next=count+1;

newsys = new Sys(count+”“,”j>“,first,middle,next+1+”“);

sysList.add(newsys);

}

| node=”>=“ middle=Expreion()

{

count++;

next=count+1;

newsys = new Sys(count+”“,”j>=“,first,middle,next+1+”“);

sysList.add(newsys);

}

| node=”

{

count++;

next=count+1;

newsys = new Sys(count+“”,“j

sysList.add(newsys);

})

{

return next;

} }

四、实习总结

通过本次语义分析的总结,我加深对语法制时翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法,实习过程中采用递归下降语法制导翻译法对算术表达式、赋值语句、条件语句、循环语句进行语义分析生成四元式序列。这次实习过程中虽然遇到了一些困难,但是通过和老师还有同学的讨论与交流问题都一一解决了,总之这次实习获益匪浅。

《实验三 语义分析 实习报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
实验三 语义分析 实习报告
点击下载文档
相关专题 实验三语义分析报告 实习报告 语义 实验三语义分析报告 实习报告 语义
[实习报告]相关推荐
    [实习报告]热门文章
      下载全文