CMM脚本语言基础:语法、基本指令和控制结构
1. CMM脚本的基本结构
CMM脚本主要由指令、变量声明、控制结构和子程序组成。以下是一个基本的CMM脚本结构。
; 注释行:以分号开头的行是注释
GLOBAL &global_var1, &global_var2 ; 全局变量声明
; 主程序开始
&global_var1 = 0 ; 初始化全局变量
&global_var2 = "Hello"
GOSUB MySubroutine ; 调用子程序
ENDDO ; 主程序结束
; 子程序定义
MySubroutine:
LOCAL &local_var ; 局部变量声明
&local_var = 42
PRINT "This is a subroutine, local_var = ", &local_var
RETURN ; 返回主程序
2. 变量
- 全局变量:使用
GLOBAL
关键字声明,可以在整个脚本中访问。 - 局部变量:使用
LOCAL
关键字声明,只能在定义它的子程序或块中访问
GLOBAL &global_var
LOCAL &local_var
3. 基本指令
- 赋值:使用等号
=
进行赋值。 - 打印:使用
PRINT
输出信息。
&global_var = 10
PRINT "The value of global_var is", &global_var
4. 控制结构
- 顺序语句:顺序执行,这个就是一条语句一条语句进行执行,没有好解释的。
- 条件语句:使用
IF
关键字。
IF &global_var == 10
(
PRINT "global_var is 10"
)
ELSE
(
PRINT "global_var is not 10"
)
- 循环语句:使用
WHILE
或REPEAT
关键字。
LOCAL &i
&i = 0
WHILE &i < 10
(
PRINT "i =", &i
&i = &i + 1
)
5. 子程序
- 子程序使用标签和
RETURN
关键字定义和返回。 - 使用
GOSUB
关键字调用子程序。
MySubroutine:
LOCAL &local_var
&local_var = 42
PRINT "In subroutine, local_var =", &local_var
RETURN
6. 对话框
- 创建对话框:使用
DIALOG
块。 - 添加控件:包括按钮、复选框、文本框等。
- 启用控件:使用
DIALOG.Enable
。
DIALOG
(
HEADER "Example Dialog"
POS 1. 1. 32.
EXAMPLE_BUTTON: BUTTON "Run Example Script"
(
PRINT "Button Clicked"
)
EXAMPLE_CHECKBOX: CHECKBOX "Option" ""
POS 1. 3. 16.
msg1: DYNTEXT "Input: "
POS 8. 3. 16.
EXAMPLE_TEXTBOX: EDIT "" ""
)
DIALOG.Enable EXAMPLE_BUTTON
DIALOG.Enable EXAMPLE_CHECKBOX
DIALOG.Enable EXAMPLE_TEXTBOX
STOP
DIALOG.END
7. 常用命令
- RUN:运行另一个脚本或命令。
RUN "script_path" "arg1" "arg2" "arg3"
功能
RUN
用于启动并执行一个新的脚本文件。- 它会在一个新的上下文中运行被调用的脚本,相当于启动一个新的进程。
特点
- 独立运行:被
RUN
执行的脚本在一个独立的上下文中执行,不会继承调用脚本的上下文环境(如局部变量、当前的堆栈状态等)。- 不返回调用点:一旦执行
RUN
,被运行的脚本完成后,不会返回到调用它的脚本。- 传递参数:可以通过命令行参数的形式传递参数给被运行的脚本。
DO "&script_path" "operation" "variant" "file"
功能
DO
用于调用当前脚本中的子程序或者执行其他脚本文件中的指定操作。- 它会在当前的上下文中执行被调用的脚本或子程序。
特点
- 上下文共享:被
DO
执行的脚本或子程序在当前的上下文中运行,可以访问和修改调用它的脚本的全局变量和局部变量。- 返回调用点:被
DO
调用的脚本或子程序完成后,会返回到调用点并继续执行调用它的脚本。- 传递参数:可以通过参数的形式将值传递给被调用的脚本或子程序。
- IF:条件判断。
IF condition
(
PRINT "Condition is true"
)
- GOSUB:调用子程序。
GOSUB SubroutineName
- RETURN:返回主程序。
RETURN
示例脚本演示
以下是一个综合示例,演示了全局变量、局部变量、子程序、条件判断、循环、对话框和常用命令的使用:
; 定义全局变量
GLOBAL &global_var
&global_var = 10
; 主程序
GOSUB Initialize
GOSUB ShowDialog
ENDDO
; 初始化子程序
Initialize:
PRINT "Initializing..."
RETURN
; 显示对话框子程序
ShowDialog:
DIALOG
(
HEADER "Example Dialog"
POS 1. 1. 32.
; 添加按钮
EXAMPLE_BUTTON: BUTTON "Run Example Script"
(
PRINT "Button Clicked"
&global_var = &global_var + 1
PRINT "global_var =", &global_var
)
; 添加复选框
EXAMPLE_CHECKBOX: CHECKBOX "Option" ""
; 添加文本框
POS 1. 3. 16.
msg1: DYNTEXT "Input: "
POS 8. 3. 16.
EXAMPLE_TEXTBOX: EDIT "" ""
)
DIALOG.Enable EXAMPLE_BUTTON
DIALOG.Enable EXAMPLE_CHECKBOX
DIALOG.Enable EXAMPLE_TEXTBOX
STOP
DIALOG.END
RETURN