APP下载

EverEdit在Maple文件编辑运行中的运用

2021-11-21尚宝欣宫以赫朱振菊

无线互联科技 2021年18期
关键词:语法错误源代码着色

尚宝欣,宫以赫*,朱振菊

(1.东北电力大学 理学院,吉林 吉林 132012;2.群山大学,群山 541150)

0 引言

EverEdit(EE)是国内一款快速、轻量级、功能强大的纯文本编辑器,目前最新版本为4.4,在Windows操作系统下 32位安装程序的大小为4.2 M。通过设置“工具→外部工具”它可成为C++、Java等语言的一个简单的IDE。它的优点有启动速度快、界面简洁、语法着色功能完善、代码片段及关键字(包括上下文单词)自动补全功能强大等等。另外通过修改代码片段自动补全、代码折叠、大纲显示等功能,可实现对不同文件类型上述功能的个性化设置。

Maple[1]与MATLAB,Mathematica一起被称为世界最著名的三大数学软件。它具有强大的符号计算引擎。Maple把不同数学领域中常用的算法封装在不同的包中,在使用的时候可单独加载,这将大大减少了程序运行所需内存,也方便用户找寻所需函数。

1 使用EverEdit编辑Maple文件

在Maple软件中,一般会用以下3种方式进行编程:

直接使用Maple命令进行交互。这适合一般简单的交互式操作。虽然该操作比较简单,但是如果操作者对Maple的代码编辑不是特别熟悉,则会很容易出现Maple代码不能正确运行的情况。笔者的经验是,该类错误多是由于操作不当,使得Maple对文本和数学字符的识别出现了错误。一般情况下,重新编写代码能够解决这个问题,但这必然会导致代码效率的下降。该方法有代码自动提示与补全功能,但提示的内容有限,例如写一个包名后,后面并不会提示出该包中函数的名字。

在代码编辑器中编写代码[2]。它更适合编写带函数的小规模Maple源程序。该方法的好处有代码编辑器中的内容全是文本模式,不会出现文本与数学字符误识的问题;代码的自动提示与补全功能比第一种方法更加易用,且提示的内容也比较多,例如在包名后面加“:-”后会提示整个包中函数的名字;具有代码自动缩进功能,使得代码的逻辑更为清楚。它的问题有:在编辑框内换行的话需要用Ctrl+Enter组合键,使用起来较为麻烦;代码提示与补全仅限于包名及函数名,据笔者所知,Maple并没有提供代码片段的提示与初步功能。

使用Maple新提供的Maple IDE编写Maple源代码。Maple IDE基于Eclipse,是Maple为方便用户进行中或大型代码开发、Maple库开发而提供的一个集成开发环境。其优点是功能完整丰富,能提升代码编辑的效率与质量;缺点是程序较大、价格较贵。

为获取与Maple IDE类似的效率与质量优势,我们尝试用EE编辑Maple文件。主要充分利用EE的语法着色、代码片段自动补全、关键字补全、上下文单词自动补全等功能来提升源代码编写的速度与准确度。EE并未提供针对Maple源文件的语法着色文件及代码片段自动补全文件,因此需要我们创建这两个文件,文件名分别为Maple.mac、Maple.snippet,把它们分别放在EE安装目录下面的文件夹syntax和snippet中。在EE中创建.mpl作为Maple源文件的类型,语法着色与代码片段补全均与该类型相关联。

语法着色文件的创建。在Maple.mac中,对Maple语言中的注释、关键字、类型名、函数名(包括自定义、系统自带)、包名、包内函数名的着色进行了设置。具体设置方法请参考EE在线帮助文档[3]。例如,可通过

maple.AddWord( maple.CreateWord(COLOR_WORD1, “and … xor”, True ) )

将”and … xor”(单词间用空格隔开)等关键字设置成颜色索引COLOR_WORD1所对应的颜色(注意,AddWord函数使这些单词可进行自动补全)。其它的设置大多与其类似。

代码片段自动补全文件的创建。创建文件Maple.snippet,在文件Maple.mac文件加入:

maple.AddSnippet “Maple.snippet”

使EE能对.mpl类型的文件编写进行检测,并进行代码自动补全。

Maple.snippet文件中的一个自动补全代码块的形式如下

#t=读数据,用fopen从文件中读

#g=readfile

file:=fopen(“${1:filename}”, READ, TEXT):

b:=readdata(file, ${2:datatype}):

close(file):

i:=b[1]; # 注意b是一个列表

$0

键入第2部分“#g=”后面的单词(readfile)后,会出现 第1部分“#t=”后的内容作为提示,此时按Tab键,第3部分中内容会替换第2部分“#g=”后面的单词,即只键入一个单词可完成在“filename”文件中读取一个“datatype”型数据的代码,后续键入filename和datatype即可。对常用结构进行上述设置可大大减轻大脑记忆代码的负担,极大提高代码编辑的速度。

注意${1:filename}、${2:datatype}、$0表示变量,前两个表示在第3部分中需修改的部分。可用Tab或Shift+Tab键使光标在它们之间切换。最后光标会定格在$0所在的位置,即在EE中亦可像在Eclipse,NetBeans中一样进行热点导航。

为了在EE中快速定位Maple源代码中函数的位置,创建“Maple大纲.mac”文件(放在macro/__outline__目录下),借用EE的自定义显示大纲功能实现函数快速定位。将函数作为唯一的一级大纲,在Maple大纲.mac中使用正则表达式

“^[s]*(w+)[s]*:=[s]*proc[s]*((.*)).*”

对函数进行检测。最后在Maple.mac文件后面添加

maple.SetOutlineScript APP_PATH + “macro\__ outline__Maple大纲.mac”

maple.SetOutlineMethod OUTLINE_FROM_SCRIPT

使EE在打开.mpl文件时,自动对其进行函数的检测与显示。

2 使用EverEdit分析Maple程序中的语法错误

结合EE与cmaple.exe可实现对Maple源文件中语法错误的检测。

将cmaple.exe所在目录添加到环境变量path中,在EE的外部工具中进行如下设置:

标题:&Sparse

功能:分析Maple文件(.mpl)中的语法错误

结果:将语法分析的结果输出到“输出窗口”中

命令:cmaple.exe -P

参数:$(FileName)

初始目录:$(FileDir)

动作模式:捕获输出(隐藏窗口)

若.mpl文件中有语法错误,用Sparse菜单可将Maple对该文件所做语法分析显示在EverEdit的“输出窗口”。注意,它只显示语法错误第一次出现的位置。

3 使用EverEdit运行Maple程序

对EE进行简单配置可实现在EE窗口下运行Maple源程序。在EE的外部工具中进行如下设置:

标题:&Maple

功能:运行Maple文件(.mpl)

结果:将运行结果输出到“输出窗口”中

命令:cmaple.exe

参数:$(FileName)

初始目录:$(FileDir)

动作模式:捕获输出(隐藏窗口)

进行上述设置之后,EE的输出窗口会捕获到Maple的运行结果,包括命令的回显及程序的结果。若不想看到命令的回显,可把“命令”里的cmaple.exe加参数“–q”。

需注意,用EE运行Maple程序时,每次均将整个文件全部运行一遍,这样会失去了一定的灵活性。因此使用EE编辑运行Maple文件,最适合于多函数或创建Maple库的应用中。

4 结语

用EE编辑Maple源代码可大幅提高源码编写的效率与质量;在EE中使用cmaple.exe –P分析语法,可快速定位语法错误的位置;在EE中使用cmaple.exe或cmaple.exe –q运行Maple文件可使运行结果直接在EE中呈现出来,方便调试源代码的逻辑错误。这能大大提高中、大型Maple程序的编写与调试的效率与质量。

猜你喜欢

语法错误源代码着色
人工智能下复杂软件源代码缺陷精准校正
蔬菜着色不良 这样预防最好
基于TXL的源代码插桩技术研究
苹果膨大着色期 管理细致别大意
10位画家为美术片着色
软件源代码非公知性司法鉴定方法探析
汉语负迁移对英语写作的影响及启示
高中英语写作中的语法错误分析
揭秘龙湖产品“源代码”
Thomassen与曲面嵌入图的着色