中间代码生成器java代码_PL0语言编译器的中间代码生成.docx

PL0语言编译器的中间代码生成

课程设计报告 ( 2016--2017年度第一学期)名称:编译技术课程设计题目: PL/0语言编译器的中间代码生成院系:控制与计算机工程班级:信安1401学号: 1141290105 学生姓名:黄竞昶指导教师:徐欢设计周数:一周成绩:日期:2016年 12 月29日1 课程设计的目的和要求1.1 课程设计的目的本次设计的时间为1周,目的是通过使用高级语言实现部分算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术。1.2 课程设计的要求1、要求用递归子程序法/或预测分析法实现对表达式、各种说明语句、控制语句进行语法分析。2、若语法正确,则用语法制导翻译法进行语义翻译:对说明语句,要求将说明的各符号记录到相应符号表中;对可执行语句,应产生出四元式中间代码并填写到三地址码表中;3、若语法错误,要求指出出错性质和出错位置(行号)。出错处理应设计成一个出错处理子程序。2 系统描述PL/0的编译程序和目标程序的解释执行程序都是用JAVA语言书写的,因此PL/0语言可在配备JAVA语言的任何机器上实现。本次课设开发平台即为JAVA。用递归子程序法实现了对表达式、各种说明语句、控制语句进行语法的分析。其中,对各个变量符号保存到了符号表中。对可执行语句,转化成四元式中间代码进行输出。本程序中,通过出错处理子程序,也进行了语法的错误的记录,并且输出了出错的行号和出错原因。该程序的输入是打开test文件,通过文件输入流读入,输出有生成的中间代码、符号表内容、错误分析三部分内容,分别用java界面控件显示出来。2.1 文法的描述在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。文法的描述多用BNF(巴克斯范式),而另一个重要的概念:正则表达式,也是文法的另一种形式。PL/0文法的EBNF表示:::= .::= [][][]::= const{,};::= =::= {}::= {|}::= var{, };::= {;}::= procedure;::= ||||||| ::= := ::= [+|-]{}::= {}::= || ‘ ( ’ ‘ ) ’::= +|-::= *|/::= |odd::= =|<>||>=::= ifthen::= whiledo ::= call ::= begin{;}end::= read ‘ ( ’{, } ‘ ) ’::= write ‘ ( ’{, } ‘ ) ’::= a|b|c|d…..x|y|z ::= 0|1|2|3…...8|93 概要设计3.1 概要设计(体现系统的设计思路和主要功能)首先在源程序相同的目录下创建一个txt文档,并在文档中输入需要编译的程序即if-else语句,然后定义一个输入流文件,利用这个流文件中的open函数打开我需要编译的txt文件,在调用初始化各种变量的初始化函数。接着开始进行词法分析,词法分析程序的主要任务是对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换成长度统一的标准形式—属性字。词法分析是编译过程中的第一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。单词的分类(五类):1. 关键字:由程序语言定义的具有固定意义的标识符。也称为保留字或基本字。2. 标识符:用来表示程序中各种名字的字符串。3. 常数:常数的类型一般有整型、实型、布尔型、文字型。4. 运算符:如+、-、*、/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Apache POI和FreeMarker来实现Java生成docx文档的功能。以下是一个简单的示例,演示如何使用这两个库来生成docx文档。 1. 首先,你需要在项目中导入Apache POI和FreeMarker的依赖。这可以在pom.xml文件中完成,如下所示: ``` <dependencies> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> </dependencies> ``` 2. 创建一个docx模板文件。你可以使用Microsoft Word等工具来创建模板文件,并将其保存为docx格式。 3. 在Java中编写代码来读取模板文件,并将数据填充到模板中。以下是一个示例代码: ```java import java.io.*; import java.util.*; import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import freemarker.template.Configuration; import freemarker.template.Template; public class DocxGenerator { public static void main(String[] args) { Map<String, Object> data = new HashMap<>(); data.put("name", "John Doe"); data.put("age", 30); data.put("address", "123 Main St."); try { // Read the template file InputStream is = new FileInputStream("template.docx"); XWPFDocument doc = new XWPFDocument(is); // Use FreeMarker to populate the template with data Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg.setClassForTemplateLoading(DocxGenerator.class, "/"); Template template = cfg.getTemplate("template.ftl"); StringWriter writer = new StringWriter(); template.process(data, writer); // Replace the placeholder in the document with the generated content for (XWPFParagraph p : doc.getParagraphs()) { List<XWPFRun> runs = p.getRuns(); if (runs != null) { for (XWPFRun r : runs) { String text = r.getText(0); if (text != null && text.contains("{{content}}")) { text = text.replace("{{content}}", writer.toString()); r.setText(text, 0); } } } } // Save the document to a file OutputStream os = new FileOutputStream("output.docx"); doc.write(os); os.close(); doc.close(); } catch (IOException e) { e.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例中,我们首先从模板文件中读取docx文档,并使用FreeMarker将数据填充到模板中。然后,我们遍历文档中的段落和运行,并查找包含“{{content}}”的文本,并将其替换为生成的内容。最后,我们将生成的文档保存到一个新文件中。 4. 创建一个FreeMarker模板文件,以指定如何填充数据。以下是一个示例模板文件: ``` Name: {{name}} Age: {{age}} Address: {{address}} ``` 在这个模板中,我们使用“{{name}}”、“{{age}}”和“{{address}}”作为占位符,以指定生成的文档中的数据位置。 5. 运行Java代码,生成docx文档。 这是一个简单的示例,演示了如何使用Java生成docx文档。你可以根据自己的需求修改代码和模板文件,以生成更复杂的文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值