SingThink分享 http://blog.sciencenet.cn/u/ymdushandong

博文

一个软件的开发笔记(4)二次开发语言的设计与实现

已有 6465 次阅读 2013-7-25 10:36 |个人分类:开发手册|系统分类:科研笔记| 软件, 开发, 二次开发语言

 

为了增加模型集成系统使用的灵活性,设计开发这套可以编程的“二次开发语言”,暂时定名为RTM语言。从春节到现在主要在做这件工作。

每次回车,系统接受字符串,分析字符串,进行判断用户的操作意图,然后解析出字符串中的内容,执行相应的操作。其实是简单的指令+一套数据结构+一套流程控制。

将所需要的指令整理成如下的几类:

0. 系统查询类的指令

1. 模型信息查询类的指令

2. 变量的声明,引用,赋值和查询类的指令

3. 运行类的指令

4. 流程控制类的指令

5. 文件IO类的指令

6. 数学计算,回归统计类的指令, 参考IDL中的Mathematics

7. 与其他语言的接口指令

8. 数据可视化类指令

 

详细的设计如下: 其中绿色的指令是已经开发完成的。黄色的是正在开发测试中的。

 

 

*******************************************************************************

0. 系统查询类的指令

*******************************************************************************

RTM> sys.list

 

RTM> sys.CPU_Core_Num                                          // CPU的核心数

 

RTMsys.Memory                                           // 系统开辟的内存数

 

*******************************************************************************

1. 模型信息查询类的指令

*******************************************************************************

RTM> Root.ListHelpauthorband                                // 显示系统中所有的模型名称,模型简要说明,模型波段,模型作者等

 

RTM> Modtran.ListValueDataTypeSizeUnitRangeMean      // 显示指定模型Modtran的所有输入输出参数名称,参数类型,参数尺寸,单位,取值范围,含义

 

RTM> Modtran.Input.ListValueDataTypeSizeUnitRangeMean // 显示指定模型Modtran的所有输入参数名称,参数类型,参数尺寸,单位,取值范围,含义

 

RTM> Modtran.Output.List  同上                            // 显示指定模型Modtran的所有输出参数名称,参数类型,参数尺寸,单位,取值范围,含义

 

RTM> Modtran.Input.V1.list  同上                          // 在文本窗口显示指定模型Modtran的指定输入参数V1的值,它是由load ModtranV1.list两个语句组成。

 

RTM> Modtran.Input.V1.Plot                                 // 在绘图窗口绘制显示指定模型Modtran的指定输入参数V1的值

 

RTM> Modtran.Output.TRANS.list                             // 在文本窗口显示指定模型Modtran的指定输出参数TRANS的值

 

RTM> Modtran.Output.TRANS.Plot                             // 在绘图窗口绘制显示指定模型Modtran的指定输出参数TRANS的值

 

RTM> Modtran.Output.TRANS.Plot LUT_Model                  // 调用复杂显示模块,进行显示TRANS

 

*******************************************************************************

2. 变量的声明,引用,赋值和查询类的指令

*******************************************************************************

我们要在每一个查询的语句返回一个结果变量,保存在通用的变量名称为ANS的变量中。如果通过“=”赋值,则被复制到“=”左边的变量中。与MATLAB类似的风格,如果行结尾处有“;”则不打印返回结果,否则打印出该结果到命令行的下一行。

结构体的声明,赋值和查询。

 

RTM> B = int[10] (float[10] short[10] char[10] double[10]) // 变量的声明

 

RTM> B = int[10;10]                                        // 变量的声明

 

RTM>A = <B>[10]                          //变量声明,数据类型如B的声明10组。

 

RTM>A = “C:adafdasdf.hdr”      /// 字符串变量的赋值。

 

RTM> B = AAA[i] i为任意整数,在取值范围内)

 

RTM> B = AAA[i;j]  ij为任意整数,在取值范围内)

 

RTM> B = AAA[i;:]  

 

RTM> B = AAA[i;n1:n2]

 

RTM> B[j;i;k] = a  

 

RTM> B[j;n1:n2] = AAA[i; n1:n2]

 

RTM> Modtran.Input.V1 = 30                                 // Modtran模型的参数V1进行赋值为30的操作

 

RTM> Modtran.Input.V1 = 30;31;32;33;34;35                  // Modtran模型的参数V1进行赋值为多个值的矢量的操作

 

RTM> Modtran.Input.V1 = 30;31;32;33;34;35  LUT_Model      // Modtran模型的参数V1进行赋值为多个值的循环参数的操作

 

RTM> Modtran.Input.V1 = 30:2:50                            // Modtran模型的参数V1进行赋值为初始值为30,步长为2,结束值为50的循环参数

 

RTM> Modtran.Input.V1 = PROSPECT.V1                        // 从模型PROSPECT中的V1Modtran模型的参数V1进行赋值的操作

 

RTM> Modtran.Input.V1 = PROSPECT.V1    LUT_Model          // 从模型PROSPECT中的V1Modtran模型的参数V1进行赋值循环参数的操作

 

RTM> A= size(B)              //获取B的尺寸信息

 

RTM> A= dataType(B)              //获取B的类型

 

RTM> A= Dimension(B)              //获取B的维数

 

RTM> A= Q_INFO(B)              //获取B的尺寸信息

 

RTM> A   回车          // 打印A的数值

 

*******************************************************************************

3. 运行类的指令

*******************************************************************************

 

RTM> Modtran.run                                           // 触发模型运算

 

RTM> Modtran.run LUT_Model                              // 循环运行模型Modtran,生成查找表

 

RTM> Modtran.run LUT, M1 = 111:2:115, M2 = 2:4:19              // 组合命令,先赋值,再循环运行模型Modtran,生成查找表

有了流程控制类,这个语句的存在价值值得商榷

*******************************************************************************

4. 流程控制类的指令

*******************************************************************************

 

RTM> FOR PROSPECT.CM = 2:2:400                             // 两种以上的模型串联后,进行模型循环运算。

      FOR SAIL.VZA = 2:2:400

          PROSPECT.run

          SAIL.Input.leafTrans = PROSPECT.Output.Trans

          SAIL.run

          Ref = SAIL.Output.Ref  LUT_Model

      ENDFOR

    ENDFOR

 

    IF PROSPECT.CM > 5                                    // 判断语句

       SAIL.run

    ENDIF

 

    IF PROSPECT.CM>5 AND PROSPECT.CM < 15 OR PROSPECT.WM < 15  

                             // 组合判断语句

       SAIL.run

    ENDIF

 

 

*******************************************************************************

5. 文件IO类的指令

*******************************************************************************

该部分一部分依靠GDAL库;

一部分依靠以前开发的少量的HDR文件;

一部分依靠模型开发中采用的文件-内存模式的映射。

 

RTM> ReadFile,FilePath = aaaa, line = 2, sample = 2, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]

 

RTM> ReadFile,FilePath = aaaa, line = 2:10, sample = 2, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]  //带着line循环的读取,结果保存到AAA

 

RTM> ReadFile,FilePath = aaaa, line = 2, sample = 2:10, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]

 

RTM> ReadFile,FilePath = aaaa, line = 2:10, sample = 2:10, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]

 

RTM> ReadFile,FilePath = aaaa, Lat = 38.56:0.005:38.99, Lon = 108.93:0.005:109.40, DataType = float, Result = AAA  GeoTiff[ENVI_IMG] //带地理投影的数据,按照地理坐标读取,从中进行几何重采样了。

 

RTM> WriteFile,FilePath = aaaa, line = 2, sample = 2, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]

 

RTM> WriteFile,FilePath = aaaa, line = 2:10, sample = 2, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]  //带着line循环的读取,结果保存到AAA

 

RTM> WriteFile,FilePath = aaaa, line = 2, sample = 2:10, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]

 

RTM> WriteFile,FilePath = aaaa, line = 2:10, sample = 2:10, DataType = float, Result = AAA  F[C] ASCII[BIN][GeoTiff][ENVI_IMG]

///文件群的读取

 

RTM> ReadFile,FilePath = aaaa, FormatFilePath = FFFF, Result = AAA  ///文件-内存模式的映射的文件读取

 

RTM> WriteFile,FilePath = aaaa, FormatFilePath = FFFF, Result = AAA  ///文件-内存模式的映射的文件读取

 

*******************************************************************************

6. 数学计算,回归统计类的指令, 参考IDL中的Mathematics

*******************************************************************************


RTM>  C = Convolution(A, B)                       \卷积计算

 

RTM C = FFT(A)                                  \付利叶变换

 

RTM C = inFFT(A)                                \付利叶逆变换

 

RTM>  R = PLANK(T,WaveLength)                     \普朗克公式

 

RTM>  T = inPLANK(R,WaveLength)                   \普朗克逆运算公式

 

RTM> C  = A+-*/B                                  \加减乘除计算

 

RTMC = exp(A)                                   \指数计算

 

RTMC = A^n                                      \幂运算

 

RTM> Regress A, Type = 1, Result = A_Regress      \数据回归成某一个公式

 

RTM> CurFit                                       \曲线拟合(参考IDL中的Curve and Surface Fitting)

 

RTM> Interp                                       \曲线拟合(参考IDL中的Curve and Surface Fitting)

 

其他很多,参考Mathematics

 

*******************************************************************************

7. 与其他语言的接口指令

*******************************************************************************

 

RTM> IDL_CMD("aaaaaaaaa")                          \ IDL中执行aaaaaaa命令

 

RTM> IDL_DataTransfer("V_IDL_Name", A,true)        \ 将参数AIDL中的"V_IDL_Name"数据交换,交换方向决定于true.

 

RTM> Mat_CMD("aaaaaaa")                          \ MatLab中执行aaaaa命令

 

RTM> Mat_DataTransfer("V_IDL_Name", A,true)        \ 将参数AMatLab中的"V_IDL_Name"数据交换,交换方向决定于true.

 

*******************************************************************************

8. 数据可视化类指令

*******************************************************************************

RTM> plot(A,B)

RTM> IMG(A)

RTM> Surf(A)

RTM> Masic(A)

RTM> MasicOnBall(A)

RTM> Map(A)

RTM> Overlay(A)


 

 

 



https://wap.sciencenet.cn/blog-98709-711102.html

上一篇:从理想主义到经验主义
下一篇:无题
收藏 IP: 159.226.117.*| 热度|

1 彭彬

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-19 17:04

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部