实验三 语义分析 实习报告

时间:2024.5.2

实验三 语义分析

一、实习目的

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

二、实习要求

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

三、实习过程

实习代码;

/**

* 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 class whileParse {

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

public static ArrayList<Sys> sysList = new ArrayList<Sys>();

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<sysList.size(); i++){ System.out.println(sysList.get(i)); }

} catch (Exception e) {

System.out.println("NOK.");

System.out.println(e.getMessage()); parser.ReInit(System.in);

} catch (Error e) {

System.out.println("Oops.");

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

}

} catch (FileNotFoundException e1) { e1.printStackTrace();

}

}

}

PARSER_END(whileParse)

SKIP :

{

" "

| "\r"

| "\t"

| "\n"

| <"/*"(~["*"])*"*"(~["/"](~["*"])*"*")*"/"> }

TOKEN : /* OPERATORS */

{

< PLUS: "+" >

| < MINUS: "-" >

| < MULTIPLY: "*" > | < DIVIDE: "/" >

}

TOKEN :

{

< CONSTANT: ( <DIGIT> )+ > | < #DIGIT: ["0" - "9"] > }

TOKEN:

{

<MAIN: "main"> | <VOID:"void">

| <WHILE:"while"> | <ASSIGN:"=">

| <FOR:"for">

| <IF:"if">

| <ELSE:"else">

| <IF_ELSE:"if else">

}

TOKEN:

{

<GREAT:">">

| <LOWER:"<">

| <GREATE:">=">

| <LOWERW:"<=">

}

TOKEN:

{

<LC:"(">

| <RC:")">

| <LM:"[">

| <RM:"]">

| <LB:"{">

| <RB:"}">

}

int start() : {}

{

Procedure() <EOF> { return 0; }

| <EOF> { return 1; }

}

/*处理主程序*/

void Procedure():{}

{

<VOID> <MAIN> <LC><RC><LB>

(Content())*<RB>

}

void Content():{}

{

WhileStatement()|IfStatement()

}

void WhileStatement():

{

Token node;

int j1;

int next;

Sys newsys;

}

{

<WHILE><LC>

{

next=count+1;

}

Condition()<RC>

{

count++;

j1=count;

newsys = new Sys(count+"","J","_", "_", j1+"#"); sysList.add(newsys);

}

(<LB>(WhileStatement()|IfStatement())*<RB>)* {

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;

}

{

<IF><LC>

{

next=count+1;

}

Condition()<RC>

{

count++;

j1=count;

newsys = new Sys(count+"","J","_", "_", j1+"#"); sysList.add(newsys);

}

(<LB>(IfStatement()|WhileStatement())*<RB>)* {

count++;

newsys = new Sys(count+"","J","_", "_", next+""); sysList.add(newsys);

EditSys.huitian(sysList, j1+"#", count+1+""); }

}

String Expression() :

{

String first;

String middle;

String temp="";

Sys newsys;

}

{

first=Term()

{

temp=first;

}

(<PLUS> 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)+""; }

| <MINUS>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;

}

(

( <MULTIPLY> 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)+""; }

| <DIVIDE> 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=<CONSTANT>{return node.image;}

| <LC> str=Expression()<RC>{return str;}

}

int Condition():

{

Token node;

int next;

String first;

String middle;

Sys newsys;

}

{

first=Expression()(node="<" middle=Expression() {

count++;

next=count+1;

newsys = new Sys(count+"","j<",first,middle,next+1+""); sysList.add(newsys);

}

| node=">" middle=Expression()

{

count++;

next=count+1;

newsys = new Sys(count+"","j>",first,middle,next+1+""); sysList.add(newsys);

}

| node=">=" middle=Expression()

{

count++;

next=count+1;

newsys = new Sys(count+"","j>=",first,middle,next+1+""); sysList.add(newsys);

}

| node="<=" middle=Expression()

{

count++;

next=count+1;

newsys = new Sys(count+"","j<=",first,middle,next+1+""); sysList.add(newsys);

})

{

return next;

}

}

四、实习总结

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


第二篇:实验设计及统计分析实习报告


      研究不同栽培模式(种植模式)及施氮量对冬小麦产量的影响

                            

摘要:【目的】研究不同栽培模式及施氮量对冬小麦产量的影响。【意义】通过研究对比不同种植模式下小麦的产量,来找出最佳生长条件,从而达到增产的目的。

【实验设计】在农作一站进行了田间试验, 以常规栽培为对照, 比较了补灌、覆草和垄沟等栽培模式及0、120、240kg/ hm2 施氮水平,研究对冬小麦产量的影响。【结果】从实验结果看出,不同的栽培模式对土壤的保水保肥效果不同,总的来说是垄沟的最好,覆草的次之。氮时在施氮量为N120时,补灌的硝态氮累积量较好,所以耕作模式的好坏,与土壤含水量也密切相关。

关键词:栽培模式   冬小麦   施氮量   小麦产量

前言:

   在当今世界,随着人口的不断增加,粮食问题已成为世界普遍关注的问题,而在我国小麦的产量就攸关重要。所以如何更好地提高小麦产量已成为我们问普遍关注的问题。因此,我们应采取综合开发措施,最大限度的提高有限水的利用效率,以及适当的施氮量,对提高某小麦产量和粮食的自给能力,促进农业的可持续发展具有重要的意义。

一、材料与方法

1、实验区概况

      田间试验在西北农林科技大学农作一站进行。该地位于渭河三级阶地, 年平均气温13C,年平均降水量约630mm , 其中79 月降雨量占年降水量的60% ~ 65%, 属半湿润易旱地区。供试土壤为塿土, 系统分类为钙积土垫旱耕人为土。0~20 cm 表层土壤容重1. 32 g/ cm3 , pH 8. 25。耕层土壤含有机质15. 22 g/ kg, 全氮0. 67 g / kg, 硝态氮13. 5 mg / kg, 铵态氮1. 9 mg/ kg, 速效磷17. 2mg/ kg , 速效钾169. 4 mg/ kg。【1】

2、田间实验设计

     本实验有两个研究因子,栽培模式和施氮量。栽培模式有五个水平,即常规(无垄沟,不覆膜覆草)、麦草覆盖(300kg/667 m2)、垄上覆膜(垄上覆膜,沟内播种,垄宽:沟宽=40cm:50cm ,沟内种3行,共播种21行,每副区6个垄)、垄上覆膜沟内覆草(垄上覆膜,沟内覆草,垄宽:沟宽=40cm:50cm ,沟内种3行,共播种21行,每副区6个垄)、冬季补灌(冬季灌水40mm)。施氮量有3个水平,即0、120、240kg/hm2。氮肥采用尿素(N:46.7%);磷肥(P2O5:16%)作肥底,用量100 kg/ hm2。所有肥料在小区内全面撒施,用旋耕机翻入土中。

    田间排列采用裂区设计,栽培模式为主区,施氮量为副区,4个区组(即重复四次)。副区面积为6m×9.9m =59.4 m2, 60个副区总面积59.4×60=3564 m2 ,外加小区之间的垄宽,试验地总面积约为6亩。

    播量:8.5kg/667 m2 ,常规、覆草和补灌3种栽培模式每小区播种30行;覆膜、垄沟模式每小区播种21行。

3、数据处理方法

     实验数据采用Excel软件进行数据处理和统计分析。

二、结果与分析

1、不同栽培模式及施氮量对土壤剖面含水量的影响分析

 不同栽培模式及施氮量对土壤剖面含水量的影响(单位:%)

    由柱形图可知,当田间不施氮时,在土层深度为0~60cm的范围内,受种植模式的影响,有垄沟的土壤剖面含水量最高,依次是覆膜的、常规的、覆草的、补灌的;往后随着土层深度的增加,土壤剖面的含水量受种植模式的影响变化幅度较小。

    由折线图可看出,在土层深度为0~30cm范围内,各种种植模式下土壤剖面含水量变化幅度较小;30~70cm时各种植模式下的土壤剖面含水量均减少,70~90cm时含水量增加,90~200cm时含水量基本不再变化。其中在土层深度为20~40cm时土壤含水量最高。由柱形图可看出,当施氮量为120kg/hm2时,在土层0~200cm深度范围内,垄沟的土壤剖面含水量最高,覆草的仅次于垄沟,依次是覆膜的、常规的、补灌的。

    施氮量为240kg/hm2时,在土层深度为0~20cm范围内,覆草的含水量高;20~40cm、80~100cm内,常规的含水量高;在其余范围内,都是垄沟的含水量高。其他种植模式下土壤剖面含水量变化不是很明显。

    综合比较上面三个折线图,可看出在土层深度为20~40cm范围内,土壤剖面含水量高,更适合作物生长;在60~80cm范围内,含水量有一个最低点,此处不适合作物生长,所以在作物种植中,应尽量避免作物在此处生根;在100~200cm时,各种植模式下的含水量都趋于稳定,变化幅度较小。通过对上述不同施氮量的分析可看出,垄沟的含水量高,所以对缺水少雨的干旱地区作物来说,更加实用、有效,既保墒保温,又能集聚雨水,给作物提供更多的水分。

2、不同栽培模式及施氮量情况下对土壤剖面储水量的影响分析

不同栽培模式及施氮量情况下土壤剖面的储水量(单位:cm)

     当施氮量为0时,在土层深度为0~30cm的范围内,各种种植模式下土壤剖面的储水量随着土层深度增加而增加;在20~40cm时垄沟模式有最大值,此时储水量最大;在40~80cm时,各种种植模式下土壤剖面的储水量随着土层深度增加而减少;在80~200cm范围时,五种种植模式下土壤剖面的储水量有较小幅度的上升。

    当施氮量为120kg/hm2 时,在土层深度为0~30cm时,各种种植模式下土壤剖面储水量随土层深度的增加而增加;在30~70cm时,随着土层深度增加而减少;在70~200cm范围内储水量有所增加,但幅度很小。从图中可看出,在此施氮量情况下,垄沟模式的储水量一直处于较高水平,补灌模式的储水量一直较低,故垄沟模式较好。

    当施氮量为240kg/hm2时,在土层深度为0~40cm 时,补灌模式储水量最高;在20~40cm时,常规模式储水量最高;之后,垄沟的储水量相对较高,但各种植模式下的储水量相差不大。所以此种情况下补灌模式较好。

3、不同栽培模式及施氮量对土壤剖面NO3--N的影响分析

不同栽培模式及施氮量对土壤剖面NO3--N的影响(单位:mg/kg)

    当施氮量为0时,在土层深度为0~50cm范围内,垄沟的硝态氮含量最高;在50~90cm范围内,覆膜的硝态氮含量最高;在120~200cm范围内,覆草的硝态氮含量最高。在20~40cm范围内,有一个最高点,此处硝态氮含量达到最高,有利于作物生长。考虑农作物根的生长深度,垄沟模式最好。

    当施氮量为120kg/hm2时,在土层深度为0~60范围内,补灌的硝态氮含量最高,依次是覆草、覆膜、垄沟;在80~200cm范围内,补灌的含水量最高。由此可得,在施氮量为120时,补灌的土壤剖面硝态氮含量最高。在20~40cm范围内,有一个最高点,此处硝态氮含量达到最高,有利于作物生长。考虑农作物根的生长深度,补灌模式最好。

    当施氮量为240kg/hm2时,在土层深度为0~70cm范围内,垄沟土壤剖面的硝态氮含量最高;在70~160cm时,覆膜的土壤剖面硝态氮含量最高,依次是垄沟的、覆草的、补灌的、常规的。考虑农作物根的生长深度,垄沟模式最好。

4、不同栽培模式及施氮量情况下对NO3--N累积量的影响分析

       不同栽培模式及施氮量情况下NO3--N累积量(单位:kg/hm2

    当施氮量为0时,在土层深度为0~60cm时各种种植模式下的硝态氮累积量是先增加后减少,但垄沟模式的硝态氮累积量一直最高,在20~40cm时的垄沟模式下的硝态氮累积量有最大值;在土层深度为60~100cm时覆膜模式下硝态氮的累积量最高;再往后随着土层深度的增加,各种种植模式下的硝态氮累积量趋于稳定且相差不大。

    当施氮量为120kg/hm2时,在土层深度为0~60cm时,各种模式下的硝态氮累积量是先增加后减少,补灌模式下硝态氮累积量最大,依次是覆草的、覆膜的、常规的、垄沟的,在20~40cm时,各种植模式下的硝态氮累积量有最大值;在60~200cm时,不管模式下硝态氮累积量最大,其他种植模式下硝态氮累积量相差不大且累积量较少。

    当施氮量为240kg/hm2时,在土层深度为0~60cm时,各种模式下的硝态氮累积量是先增加后减少,垄沟模式下硝态氮累积量最大;在20~40cm时,各种植模式下的硝态氮累积量有最大值;在40~200cm时,覆膜的硝态氮累积量最高,垄沟模式的次之,其他模式的变化幅度较小且相差不远。

三、讨论

不同栽培模式对小麦的生长发育及产量有着重要的影响,我们通过实验结果对比,找出最适合小麦增产的种植模式,这对促进我国粮食产业的发展有着重要的意义。下面我们通过实验对比来找出不同因素对小麦生产的影响。

1、不同栽培模式和施氮量对土壤含水量和储水量的影响

     实验数据表明,在杨凌地区垄沟模式是最有利于小麦生长的。因为有以下作用:一是减少土壤水分的蒸发,尤其是秋覆膜和顶凌覆膜避免了秋冬早春休闲期土壤水分的无效蒸发;二是增加了积温,扩大了中晚熟品种的种植区域。三是对雨水有汇集作用,湿气流入作物的根部,有利于作物更好的吸收利用。

 在不施氮和施氮量为120kg/hm2时,覆草模式土壤剖面含水量和储水量较常规模式高。据资料可知,2008 ~ 20## 季小麦不施氮肥时,覆草处理较常规显著增产34. 99%。【2】所以可知道,覆草模式对冬小麦的生长更有利。在施氮量为240时,从数据可看出,常规模式较覆草模式好。研究表明,小麦生育期间均不进行人工灌溉,小麦子粒产量为覆草N120 > 常规N120,说明覆草处理可以提高小麦产量。【3】而覆草N240 < 常规N240,但其增产有一定水氮条件限制,施氮量较高时,覆草已表现出小麦减产趋势。所以说适当的施氮量对促进小麦的增产有利。

2、不同栽培模式和施氮量对土壤硝态氮含量和硝态氮累积量的影响

     由数据综合比较可知,在不施氮和施氮量为240kg/hm2时,垄沟模式最好。而在施氮量为120kg/hm2时,补灌模式较好。查资料知,旱地在冬季进行补充灌溉对提高小麦氮素利用效率具有积极的作用【4】。所以我们得到的这个数据估计是当年将数量较少的缘故,毕竟只有一年的数据,我们也很那判断这些数据的准确性。

     由于小麦在种植过程中不止受一种因子的制约,所以我们应考虑各方面的效应,使其紧密配合,更有利以小麦的生长。

四、 结论

通过本次试验可得出,施氮量与不同栽培模式对作物的生长影响不同,【5】导致作物的产量不同。在试验中我们采用了五种栽培模式,各种模式都有其作用,导致不同栽培模式对作物生长的影响不同,如覆膜栽培在氮含量足够时的优势十分的明显,覆草、补灌与常规栽培的区别在于他们的保水保肥效果要好很多。而且也有大量试验和实践已证明了覆膜防止水分蒸发,保水、增温、增产的效果。所以我们应采取适当的栽培模式与适当的施氮量,是两者密切配合,得出最佳的模式。【6】但总的来说,在半干旱地区的旱作农田进行沟垄覆盖栽培, 既有利于抗旱、增墒,又有利于减少径流引起的水、土、肥的流失, 具有明显的经济效益和社会效益。覆膜模式和覆草模式也可以起到一定的相似作用,但是没有垄沟模式的保水作用好。

 参考文献:

【1】王春阳, 周建斌, 郑险峰, 赵满兴, 李生秀西北农林科技大学学报( 自然      科学版)   20##年1月

【2】植物营养与肥料学报2012,18( 2) : 291 - 299

【3】 胡芬,姜雁北. 半湿润易旱区农业节水技术研究[J]. 农业工程学报,       1998,14( 1) : 76 -80.

【4】薛汉文, 谢惠民, 刘立明. 冬灌对陕西关中地区小麦增产的作用              陕西农业科学, 2003( 1) : 26- 27.

【5】赵满兴, 周建斌, 郑险峰, 等. 不同施氮量对旱地不同品种冬小麦氮素累      积、运输和分配的影响[ J ] . 植物营养与肥料学报,

【6】曹国璠. 半干旱冷凉区微型种植方法、覆盖材料和补灌时期研究[ J ] . 干      旱地区农业研究, 1998, 16( 2) : 13- 18.

更多相关推荐:
语义分析实验报告(实验三)

编译原理语义分析实验报告软工082班兰洁20xx31104044一实验内容二实验目的三实验要求四程序流程图五程序代码与主要过程说明六测试用例七输出结果八实验心得一实验内容定义模拟的简单语言的语义成分将语义分析程...

编译原理语义分析实验报告——免费!

语义分析实验报告一实验目的通过上机实习加深对语法制导翻译原理的理解掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法二实验要求采用递归下降语法制导翻译法对算术表达式赋值语句进行语义分析并生成四元式序列三...

语义分析实验报告.doc

实验三语法分析20xx0810309科3李君林一实验目的通过使用剖析和扩充TINY语言的语义分析程序掌握编译器的语义分析程序的构造方法二实验内容一运行TINY的语义分析程序二扩充TINY的语法分析程序提示考虑作...

语义分析实验报告

云南大学编译原理实验报告实验题目学院专业学号姓名语义分析信息学院计算机科学与技术20xx1060064刘继远目录一实验目的1二实验内容1三源程序分析21程序采用的BNF22根据语义要求得到对应的翻译模式33实现...

北邮大三上-编译原理-语义分析实验报告

编译原理第六章语义分析班级09211311学号姓名schnee目录1234实验题目和要求3实验分析和思考3翻译方案4LR实现自底向上分析摘自语法分析实验541构造识别所有活前缀的DFA542构造LR分析表65S...

语义分析实验报告三

编译原理实践实验三中间代码生成班级计算机3班院系数学与计算机学院组员一实验目的熟悉算术表达式的语法分析与中间代码生成原理二实验内容1设计语法制导翻译生成表达式的四元式的算法2编写代码并上机调试运行通过输入算术表...

编译原理_ 语义分析_实验报告

编译原理实验三语义分析实验报告学院数学与计算机科学技术学院专业计算机科学与技术班级级计算机班小组组员姓名姓名学号姓名学号姓名学号编译原理实验三语义分析实验题目一实验目的要求学生用与实验2相同的语言编制语义分析程...

词法分析、语法分析、语义分析实例解析及实验报告

词法分析一、实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。二、实验要求2.1待分析的简单的词法(1)关键字:beginifthenwhiledoend所有的关键字都是小写。(2)运算符和界…

编译原理语义分析实验报告 免费

编译原理综合训练语义分析实验报告指导老师班级学生zeadom学号学生学号20xx629目录语言文法的形式化描述3语义规则3运行环境介绍5关键算法的流程图及文字解释51本编译器的总框架52在语义分析中的主要函数介...

编译原理实验报告

ltlt编译原理gtgt上机实验报告编译原理上机实验报告一实验目的与要求目的在分析理解一个教学型编译程序如PL0的基础上对其词法分析程序语法分析程序和语义处理程序进行部分修改扩充达到进一步了解程序编译过程的基本...

编译原理实验报告

编译原理实验报告实验一词法分析程序实现一实验目的与要求通过编写和调试一个词法分析程序掌握在对程序设计语言的源程序进行扫描的过程中将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法二实验设计语言中...

编译原理实验报告

武汉理工大学学生实验报告书实验课程名称编译原理开课学院计算机科学与技术学院指导老师姓名学生姓名学生专业班级20xx20xx学年第2学期实验课程名称编译原理实验课程名称编译原理

语义分析实验报告(18篇)