新年重磅! flowchart可视化流程图编程语言发布

为什么会有最新的计算机语言

 

我不久前曾经到一家公司工作,公司因为程序员流动,以前写的业务程序的程序员都走了,因为没有留下任何文档,新来的程序员没搞清怎么回事,这样就无法升级更新业务系统。到了公司后公司让我写流程图,实际上就是阅读源代码后把程序流程写出来,我用了几周终于把流程图画出来了,绘出流程图后公司似乎懂了,原来业务程序是这样做的。

 

我做的工作就是类似逆向,把代码还原出流程图,而我们做软件设计一般是写了流程图再写程序,有了流程图就是有了文档,大家都懂得了软件原理,阅读程序代码也就有了指导,不会摸门不着了。我于是断定,流程图是一种更高级的语言,更加容易理解的语言,如果能够把流程图生成代码,那么流程图就是一种程序语言。我想既然阅读代码能还原出流程图,为什么写流程图不能生成代码呢?

 

我本来想设计出软件后再发布(这样就是惊天制作),不过我觉得可能要比较长的时间,发布出来可以避免别人用来申请专利,对软件发展有利,当然也要时间让人们接受和熟悉新的语言。


流程图编程语言组成

 

仔细分析了流程图,我发现流程图不能生成代码的原因是写的太笼统,太随意,没有规范,设计师想怎么写就怎么写,还有流程图不能调用函数,自然就没有可能生成代码。如果根据程序语言结构规范流程图,就可以映射生成代码。于是我开始思考,如何让流程图转换成代码,反之,代码也可以生成流程图。

为此我设计了几个流程图构件,包括数据定义,结构定义,数据操作,顺序执行,分支判断和循环,此外为了生成界面,还有界面定义,数据绑定和事件绑定等,不过这些不属于流程图设计。

我决定为这种流程图语言起了一个名字叫flowchart流程图编程语言,流程图文件扩展名叫fc,在集成开发工具中,程序代码就是流程图。

 

怎么绘制流程图呢?可以开发一个流程图编辑工具,虽然可以直接通过tex排版工具绘制流程图,但是不支持拖拉可视化绘图,所以还需要设计一个流程图编辑工具,如果用word编写是否也可能呢?我觉得不是不可能,要解决的问题是,流程图怎么存储。

 

流程图语言实现

 

流程图语言既然是语言,那么就支持文本编写流程图,那么流程图程序怎么存储,其实就是文本,研究了latex发现,流程图绘制包括

流程图定义基本形状
箭头形式
定义流程图具体形状
连接具体形状
 

对于前两个应该预先定义好了,只需要存储或者编写具体形状和连接,形状可以直接转换成代码,比如分支  就是  if (分支里面的表达式),连接线就是定义代码段之间的关系,可能会层层嵌套,而流程图太大就会用子流程,放到不同fc文件。流程图语法直接用latex语法就行了,或者采用xml标记语言,类似html的元语言,总是这个语言很简单,就是具体形状和连接,展示也可以直接用 latex。

 

流程图语言编译

 

最后要生成什么语言呢?其实.net也是生成中间语言,对于流程图生成的中间语言可以是高级语言,而不是直接生成类似汇编,也不是不可以,只是比较麻烦和复杂,不利于分析和调试。生成什么语言最好呢?显然是器普sepl语言,因为流程图是用中文写的,要转换成代码直接生成中文的sepl代码,编译调试也能直接对应,方便很多。如果生成C#,变量要英文?怎么翻译呢?翻译成英文后设计流程图的人还能看懂吗?所以器普语言是天生符合流程图转换,简直就是为流程图语言而生。

 

直接把流程图语言等同于c#/java等高级语言,只是他是可视化图表语言,更容易理解。集成开发工具中直接用流程图拖拉图表编写流程,就是写程序。流程图语言编写的程序因为易于理解,方便进行交流,容易发现问题,让人们集中精力研究算法,而不是整天学习编程,让人们的软件开发能力会上一个台阶。

 

flowchart流程图编程语言只包括数据定义,结构定义,数据操作,顺序执行,分支判断和循环几个组件,学习起来非常容易,不像uml流程图,没有专业训练根本看不懂和画不出uml图形,而且uml也不能生成代码。

当然为了满足更多功能,也可以进行扩展,开发更多的组件,比如把.net组件封装成一些子流程,比如命令行输出console,让流程图编程直接调用。把.net类库封装成预定义子流程让大家绘制流程图的时候直接调用。

 

为了应用流程图编程,需要开发集成开发工具,类似visual studio/monodevelop那样,当前需要一个流程图可视化编辑工具,代码映射算法,最后直接用sepl编译器编译。器普语言只是作为中间语言。可见因为有了器普编译器,开发流程图语言就容易多了。


流程图语法规范

 

设计思想

流程图文件  .fc

流程图语法组成

 

顺序执行

 

执行数据定义,数据操作和调用子流程

用箭头表示方向

 

新年重磅! flowchart可视化流程图编程语言发布_第1张图片
  

分支(if)

判断,根据结果真假走分支

  新年重磅! flowchart可视化流程图编程语言发布_第2张图片

 

 

判断方框内填写判断表达式,直接用sepl表达式语法

 

 

循环(while)

 

循环其实也是用判断分支,只是可以往回走,简单的例子如下

 

 新年重磅! flowchart可视化流程图编程语言发布_第3张图片

                             

 

 

 

主流程(就是主函数)

流程开始

 

  新年重磅! flowchart可视化流程图编程语言发布_第4张图片


 

引用子流程(函数调用)

就如上图,中间计算月份就是子流程,它有传入和返回参数。

格式是

输入数据定义名称列表

流程名

输出数据定义名称列表

指针是数据流动方向

这些参数应该在前面做数据定义,否则传值就没定义

 

子流程定义(函数定义)

跟引用子流程的区别是传入传出是数据定义,而不是名称

输入数据定义列表(参数)

流程名   

输出数据定义  返回

 

新年重磅! flowchart可视化流程图编程语言发布_第5张图片

 


子流程支持递归调用,这样设计更方便。

 

数据操作


其实就是给变量赋值,赋值内容可以使表达式

数据名称

操作符

表达式

例子

月数

=

年龄*12

操作符和表达式直接用sepl语言的,不要另外设计。

 

数据定义

就是变量定义

数据名称

数据类型

初始数值

例子

年龄

整数

6

 

数据名称  数据类型 初始值

数据类型可以是器普.net支持的数据类型,也可以自定义,支持.号层层引用,比如

老师.身体.身高


结构定义(可以生成数据库表)

采用类似数据库定义,可能需要放在一个单独文件,也可以在流程内定义

数据名称

数据类型

初始数值

可空

主键

年龄

整数

0

 

 

 

 

 

可连接外键,连接支持一对一,一对多,生成的数据类似ado.net 实体模型 ef。

 

可空可以用于提交数据做验证,不可或缺

主键用在生成数据库库表格

不是每个数据结构都存入数据库,但是一般都要存储的

 

界面定义

类似 winform ,webform拖拉设计界面

android开发也有界面定义


数据绑定

弹出显示窗口界面对控件进行绑定数据

可能要预先设计一个绑定子流程,用来调用,比如绑定的控件名,数据列表

 

事件绑定

对winform绑定事件可能就是弹窗后绑定,不能象winform那样在form类内定义,倒是更像汇编开发界面程序使用的消息循环机制。

对webform 绑定事件就是调用后台action

 

流程图可以进行初步语法分析


流程图编写是否合法可以进行初步编译检测,比如缺少传入参数等,不过流程图都是预定义的,不能乱填写的,错误看起来可能比较直接

也可以流程图直接映射生成器普sepl代码后再编译发现错误。

 

生成sepl代码后进行编译,提示错误,成功则编译通过,生成可执行程序或者网页程序


总结


flowchart流程图编程语言是我从事自动编程研究获得的重要成果,也是器普语言编译器开发成功后再上一个台阶,它可以可以理解为器普语言的可视化编程。用ida做静态反汇编分析的时候他会把汇编代码用流程图显示出来,这样汇编代码更容易理解。不过即使是C#语言,进行代码混淆后也很难理解,因为文字含义已经丧失,必须跟踪调试才能理解其代码,甚至很难理解。我在做C#代码还原流程图设计的时候,有些变量如果没有注视,还是很难理解的,因为对业务也不了解,无法对应其意义。然而因为流程图编程语言是中文,我想这种代码理解,几乎不再是难题。我想有一天我们的计算机语言课程普遍是流程图编程语言的时候,那将是一种更加高级的计算机语言,可以称为可视化流程图编程语言。

flowchart流程图编程语言将会大大帮助开发自动编程技术,非常容易描述算法,开发算法将更加容易而高效,程序错误也会越来越少,软件危机将成为过去。


你可能感兴趣的:(新年重磅! flowchart可视化流程图编程语言发布)