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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinox2010p1/article/details/54755821

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

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

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

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


流程图编程语言组成

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

扫描二维码关注公众号,回复: 5263208 查看本文章

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

我决定为这种流程图语言起了一个名字叫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

流程图语法组成

顺序执行

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

用箭头表示方向


  

分支(if)

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

 

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

循环(while)

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

 

                             

主流程(就是主函数)

流程开始

 

  


引用子流程(函数调用)

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

格式是

输入数据定义名称列表

流程名

输出数据定义名称列表

指针是数据流动方向

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

子流程定义(函数定义)

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

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

流程名   

输出数据定义  返回



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

数据操作


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

数据名称

操作符

表达式

例子

月数

=

年龄*12

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

数据定义

就是变量定义

数据名称

数据类型

初始数值

例子

年龄

整数

6

数据名称  数据类型 初始值

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

老师.身体.身高


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

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

数据名称

数据类型

初始数值

可空

主键

年龄

整数

0

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

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

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

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

界面定义

类似 winform ,webform拖拉设计界面

android开发也有界面定义


数据绑定

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

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

事件绑定

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

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

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


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

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

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


总结


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

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


猜你喜欢

转载自blog.csdn.net/sinox2010p1/article/details/54755821