20l7年7月下 通信设计与应用55 可逆编程语言R—JAVA及其语言处理系统的设计 韩宏峰(北京邮电大学,北京100876) 【摘 要】可逆编程语言是可逆研究中的重要内容。可逆编程语言在程序编写中的应用是在实现正向运行和反向运行的基础上,对结果获取功 能或恢复输入功能进行完善。本文主要对可逆编程语言R—JAVA的设计原则和语言处理系统设计问题进行了探究。 【关键词】可逆编程语言R—JAVA;语言处理系统;设计原则 【中图分类号】TP311.1 【文献标识码】A 【文章编号】1006—4222(2017)14—0055—02 The Design of R-JAVA and Its Language Processing System HAN Hongfeng(Beijing University of Posts and Telecommunications,Beijing 100876 China) I Abstract】Reve聃ibk programming language is an important part of reversible research.Its application in program can be realized based on the for— ward and reverse operation which can improve the result acquisition function or restore input function.This paper mainly discusses the design princi- pies of R—JAVA and the design problems of language processing system in reversible programming language. 【Key words]reversible programming language R—JAVA;language processing system;design principle 刖茜 可逆编程语言是可逆计算领域的一个分支。目前我国学 者对可逆计算的研究主要集中于可逆硬件技术层面:可逆逻 辑门、可逆逻辑综合和可逆电路是学者在这一领域所关注的 热点问题。由于计算机系统中所采用的编程语言都是建立在 不可逆计算模型基础之上的.这一类语言所构建的程序往往 难以在软件层次实现可逆。在保障计算能力的情况下,借助语 言文法对可逆编程语言R—JAVA的相关问题进行研究.能为 可逆变成语言软件系统的研究提供一定的帮助 在这一函数关系式中.“①”表示的是异或运算.・表示的 是与运算[21。在可逆语言的设计过程中,赋值语句需要看作是 单设的状态变换函数。赋值语句在传统语言中存在着不可逆 的特征 在程序运行以后.系统也无法借助内存状态回推到前 一状态之中。为了对赋值语句的可逆性特征进行保障,Toffoli 门变换函数的函数形式可以为可逆编程语言R—JAVA的变换 函数所借鉴。在Toff0li函数中,n变量的变换函数为f,控制变 量为n一1个变量,以下内容就是赋值语句可逆性所要遵循的 原则: 1可逆编程语言R—JAVA的设计原则 1.1基本语句可逆原则 可逆变换函数在可逆计算中发挥着重要的作用lll。从软件 层次来看,计算机程序中的语句执行内存变量值是处于动态 F(x,yl,y2,…,yn)=(x①g(yl,y2・--,yn)) 在上述公式中,x和v1.v2…yn可以被看作是内存中的变 量,输入变量的数量和输出变量的数量需要保持相等。g(v1, v2,…,yn)是对内存中的变量因素进行任意计算的表达式。如 之中的,这样,内存状态变换函数Y=f(X)就成为了程序段赋 值语句中所应用的主要函数类型 在这一函数中.X主要指的 是程序运行以前的内存存储状态.Y是程序运行以后的内存 状态。n布尔变量是可逆逻辑研究中不可忽视的一个重要因 果这表达式中包含有x,系统的可逆性会受到一定的影响。因 而这一表达式主要是通过对临时变量进行添加的方式.来对 不可赋值语句的可逆性进行保障 1.2控制结构可逆原则 顺序结构、分支结构和循环结构是结构化程序设计所涉 素。这一变量的多输出函数f(xl,x2…xn)可以表现出可逆性 及到的三种主要控制结构。在顺序结构中,基本语句可逆的实 特征.下列公式就是T0ff0li门的变换函数: 现可以让系统的结构实现可逆。但是在分支结构和循环结构 f(tl,131,c2)=(t1④(C1.c2),C1,c2) 的上网流量进行分析与.无法对用户具体的上网行为进 利用的最大化。所以我们要每天关注用户的上网行为,了解用 行分析,例如用户的目的IP地址是无法捕捉到的。 (2)利用新的网管设备对用户进行1 2个月的上网行为 户都在干什么,找到合适的解决方法.从而使用户上网更加流 畅,而不是无的增加带宽。 进行积累与分析,查看空管宽带下所有的微信用户每天高峰 时占用的总流量,收集去往微信代理服务器的所有目的地址, 规划出详细的路由表 (3)在核心路由器NE40做静态路由。目的地址就是网管 [1lP2P及其实现原理 [2]微信的工作原理. 参考文献 设备规划出的路由表,下一跳直接指向电信防火墙.也就是所 有访问微信的用户只走电信 收稿日期:2017—7—13 作者简介:韩富宁(1985一),男,辽宁沈阳人,工程师,本科,研 究方向为通信网络。 6小结 通过对微信相关内容的分析,合理利用带宽出口是非常 重要的。基于应用来选择路由的最佳路径可以实现带宽资源 56通信设计与应用 2()l7年7月下 中,由于执行分支汇聚点在二者的执行流程图中发挥着重要 的作用。在逆向运行到汇聚点以后,系统中过多的分支会成为 控制结构可逆性的主要影响因素。条件判断在分支汇聚点中 的设置。就成为了分支结构和循环结构可逆性的主要保障 R—NAVA翻译器是将元语句翻译成等价JAVA代码的重 要工具。元语句组的正向翻译功能和反向翻译功能是翻译器 所涉及到的主要功能。正向翻译是按照由前到后的遍历顺序 对元语句组进行翻译的过程 反向翻译是系统中的一大难点 2 R—JAVA的语言处理系统设计 2.1概要设计 R—JAVA源程序是R—JAVA语言处理系统中的系统输入 程序l3I。可逆成员函数和普通成员函数可以被看作是其中的两 大重要组成部分 在这一系统中,普通程序函数可以直接交由 JDK进行处理。在可逆成员函数中,系统会在对其相关内容进 行翻译以后,让相关内容分化正向语义成员函数JAVA代码 要素。在这一过程中,系统除了要对遍历顺序进行改变以外. 还需要对每一条翻译内容进行适当的语义反转『 , 在对反向翻 译函数back—wd()进行调用的过程中,系统的指针首先需要 定位在元语句组的倒序第一条记录之中,进而通过向前遍历 的顺序翻译到第一条记录之中。 2.4 R—JAVA应用示例 以l~100的累加和求解过程为例,在源程序经过R—JA— 和反向语义成员函数JAVA代码,二者之间的合并是构建目 VA语法分析器和翻译器的处理以后,下列内容是计算过程中 标程序的重要措施。词法分析器、语法分析器和翻译器是系统 所涉及到的目标程序。中的重要组成部分。init()函数是词法分析器中所应用的函 数. 在将读取的内容存入字符串数组以后.这一函数可以将可 逆程序函数中设计的代码段进行有效分离,并将这些代码段 编入到其他的字符串数组之中。me理e函数是对可逆成员函数 翻译后的JAVA代码和源程序中的其他代码进行合并的有效 方式:forwd函数可以借助正向语义的作用.将元语句组翻译 成等价的JAVA代码.进而借助这一代码获取到元语句组中 的可逆函数所对应的正向语义函数:backward函数可以借助 反向语义获取可逆函数所对应的反向语义函数 2.2语法分析器设计 文法设计在R—JAVA语言处理系统语法分析器中发挥着 重要的作用 。针对文法类型与语法分析方法之间所表现出来 的关联性.文法设计成为了R—JAVA语法分析器设计中不可 缺少的重要内容 在这一语言处理系统中,递归下降分析法是 一种较为常用的设计方法. 在这种文法分析器的设计过程中. 文法规则既要保持可逆性,又要避免出现左递归的问题,因 而,在可编程语言R一-JAVA的设计过程中,语法分析器的设计 是其中的一大难点要素。这种语法分析器的文法规则与传统 语言之间存在着一定的相似性。可逆成员函数在R—JAVA文 法中都要以reverse为开头。类成员变量可以被看作是这一系 统的函数体中的主要变量。条件语句中还要对两种布尔条件 进行应用。在当型循环语句的应用过程中,设计者需要从循环 语句的出现顺序入手.让其与改造后的可逆分支结构和可逆 循环结构程序中应用的布尔条件进行对应。从可逆编程语言 R—JAVA的函数调月过程来看,添加有“一rev”后缀的调用形式 为反向调用形式.可逆运算符中的赋值语句的最右值仅仅蕴 含有加、减和异或功能,它的表达式中也不包含运算符号。 可逆成员函数的语法分析是R—JAVA语言处理系统中的 语法分析器的主要功能。在实际应用过程中.它可以生成以调 用元语句、赋值元语句和边界元语句为主要内容的中间代码一 元语句组 Node元语句和BoundNote元语句在这一系统中发 挥着重要的作用。在对源程序中各个成分的元语句转换过程 所遵循的规则进行探究以后.我们可以发现,struts语句块主 要由分支语句、赋值语句、循环语句等多种成分组成。对相应 成分的调用.是源程序中各个成分与元语句进行转换的有效 方式 从R—JAVA在实际应用中所遵循的文法规则来看,类 Paeser可以对文法中所涉及到的所有的非终结符进行相应的 处理.语法分析器的相关代码也会被封装在Parser类之中 在 可逆处理过程中.语法分析在从符号“可逆程序”出发以后,在 遇到终结符的情况下.会通过对其与TOKEN进行对比分析的 方式.对它的匹配适宜性进行分析.如果语法分析遇到了非终 结符.则系统对与之相应的处理过程进行调用 2_3翻译器设计 puhlic class ExampleOne{ Privite Int sum.i;H成员变量 / 普通成员函数和源程序保持一致 / 可逆成员函数sum将被翻译成两个函数。分别对应 正向语义和反向语义 / void sum()t ff正向语叉 While(i<=100){ sum=sum+i; ’_i+l;¨ Void sum rev(){//反向语义 While(i>=l1 i=i-l sum=sum—i})】 从目标程序的运行结果来看: 调用之前sum=O:i=O 正向调用结果 sum=5050:i_101 反向调用结果 Sum=0;i=0 在这一过程中,源程序中的成员变量和普通成员变量并 没有发生变化.仅仅是可逆成员函数被翻译成了正向语义函 数和逆向语句函数 3结论 可逆编程语言R—JAVA的应用,是在允许可逆语言成分 和非可逆语言成分同时出现的基础上.对普通成员函数和可 逆成员函数的源代码进行正确转换。系统中所应用的可逆程 序函数可以在正向运行的基础上产生结果,也可以在逆向运 行的基础上恢复输入。 参考文献 [1】朱鹏程,管致锦,卫丽华.可逆编程语言R~JAVA及其语言处理系统 的设计fJ1.计算机工程与设计,2013,10:3502~3510. 王玫.程序设计语言模型的设计与实现fDl_山东科技大学,2004. [3】何秋红.JavaMediaAPI的研究与应用[D1.贵州大学,2006. [4]杨哲憨.Java语言的程序漏洞检测与诊断技术lD1.复旦大学.20l2. (5】李欢欢.基于WEB和JAVA的网络管理系统}D1.昆明理工夫学, 2002. [6]钟宝华.实时Java的研究与应用[D】.广东工业大学.2004, 收稿日期:2017—7—11 作者简介:韩宏峰(1996一),男,北京人,本科,物联网工程专业 .