可逆编程语言R—JAVA与其语言处理系统设计分析

2017-07-14 06:09张应征
电脑知识与技术 2017年17期
关键词:系统设计

张应征

摘要:在可逆计算机研究过程中,可逆编程语言是尤为重要的内容,通过可逆编程语言对程序进行编写,能够实现正反两个方向的运行,以此不仅能够获得程序的结果,还能够恢复输入,所以对可逆编程语言的研究是非常有必要的。基于此,该文就对可编程语言R-JAVA和其语言处理系统进行设计及分析。

关键词:可逆编程语言;语言处理;系统设计

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)17-0063-02

可逆编程语言是可逆计算中的分支,通过其编写的程序段不仅能够获得正向运行的结果,还能够获得方向运行恢复的输入,现在对可逆计算的研究主要包括可逆逻辑综合、逻辑门及电路等硬件方面,但是关于软件方面的研究却非常少。可逆系统的完整性主要包括硬件和软件两部分的可逆,但是目前流行的编程语言都是不可逆的,其编程程序在运行过程中能够对信息进行擦除,并且计算过程只有正向确定,没有方向确定,所以可逆计算不能够在软件层实现。目前,如何实现可逆硬件平台中软件系统的研究是尤为重要的内容。

1可逆编程语言R-JAVA的设计原则

1.1基本语句

1.2控制结构

结构化程序在设计过程中最常用的控制结构包括分支、顺序及循环,只要基本语句,那么就表示顺序结构可逆,但是循环和分支不可逆,因为两者的执行流程图具有执行分支汇聚点,在逆向到汇聚点的时候,分支的选择没有依据。为了避免不可逆的出现,就要在分支汇聚点出现添加条件进行判断,在改造之后的可逆结构及循环结构见图1。

1.3其他控制

可逆编程语言R-JAVA中不仅包括JAVA语言的传统代码,还包括R-JAVA定义的可逆代码,两者的形式为成员函数。成员函数还包括普通成员及可逆成员,为了避免将两者弄混,那么就分别对两者进行定义。首先对普通成员进行定义,之后对可逆成员进行定义,从“reverse”标识符定义可逆函数,使用JAVA语言对普通成员函数进行编写,其不需要遵守可逆的原则;使用R-JAVA语言对可逆成员函数进行编写,其需要遵守可你的原则。普通成员能够实现可逆成员的调用,但是可逆成员不能够调用普通成员,可逆成员的不同函数能够相互调用。可逆成员要有两个对应语义,分别为正向和反向两种,调用可逆函数要以形式为基础进行区分。

2可逆编程语言R-JAVA语言处理系统的设计

2.1文法设计

文法的类型选择与语法的分析具有一定的联系,可逆编程语言使用的是递归下降的分析方法,其不仅直观简单,还便于构造。但是递归下降要求文法为LL1型,也就是要在分析过程中向前预读Token,从而决定使用哪种产生式,所以文法的规则不能够具有左递归,并且还要具有文法可逆,这点是文法设计中尤为重要的内容。可逆成员函数的开头一般都是“reverse”,并且没有返回值及形参,函数体中与运算变量有关的都是类成员变量,其中赋值右值的可逆运算只包括异或及加减。条件及当型两个循环语句中的布尔条件有两个,根据出现的顺序分别对应。在函数调用过程中,反向调用的后缀为“_rev”。递归下降能够实现语法分析器,其主要作用就是实现可逆成员的函数语法分析,并且生成中间代码。语法分析器的代码在Parser类中封装,非终结符都具有对应的处理过程,通过可逆程序符号实现语法分析,在遇到非终结符的时候,对相应的处理进行调用。在遇到终结符的时候,判断是否匹配。

2.2设计语法分析器

在可逆编程语言处理系统中设计语法分析器是文法设计的重要内容,两者具有密切的联系。语法分析器的主要目的就是分析可逆成员函数语法,并且生成赋值、调用及边界等元语句,元语句的父类为Node原函数,边界原函数的父类为Bound-Node。以源程序的成分向元语句类型转换规则为基础,语句块表示为stmts,主要包括赋值、分支及循环等语句,通过对豫剧的调用使其能够和元语句进行转换。通过可编程语言的文法规则可以看出来,文法的Parser中能够处理非终结符,并且在Parser类中封装语法分析器代码。在进行处理的时候,从可逆程序进行语法分析,在遇到终结符的时候要和Token对比及匹配,判断是否匹配;在遇到非终结符的时候,就要对相关的处理进行调用。在处理的时候通过相应的规则对元语句进行匹配,在其中添加元语句组具有重要的作用。

2.3设计翻译器

因为可逆函数不仅具有正向语义,还具有方向语义,所以翻译器也要具有这两种元语句组。正向翻译是非常容易的,只需要实现元语句组的遍历,将元语句翻译为等价代码。但是反向翻译不仅要具有上述过程,还要转换每条元语句翻译,从而实现语义的反转。每个语义都具有相应的翻译规则,每个翻译规则的元语句翻译都要通过正向及方向语义实现。翻译器中的代码都在Intepreter类中封装,正向及方向的翻译区别为正向翻译的遍历是从前到后实现的,反向翻译则是相反。

3结束语

本文首先介绍了可逆编程语言的设计原则,之后对可逆编程语言R-JAVA处理系统的设计进行了分析,此系统能够将可逆编程语言的源文件转变为JAVA目标文件,不仅能够得到正向预算的结果,还能够进行逆向的恢復输入。为了给基于可逆逻辑综合、可逆电路技术的可逆硬件平台设计可逆软件系统,提出基于JDK的可逆编程语言RJAVA。首先总结可逆编程语言的设计原则然后为可逆语言R-JAVA设计文法规则和语言处理系统,其语言处理系统提取源程序中的可逆代码段并将其翻译成分别对应正反语义的等价JAVA代码,再将翻译后的JA-VA代码交由JDK解释执行。最后通过示例程序表明R-JAVA源程序中的可逆函数既可正向运行,又可反向运行,从软件层次上实现了可逆计算。

猜你喜欢
系统设计
基于UML技术的高校贫困生管理系统建模分析