脚本使用手册 - BNF 语法
BNF 语法
statement
<statement> 表示一个语句,可以是 if 语句、set 语句、while 循环、for 循环或 export 语句
::= <if_statement> <new_line>
| <set_statement> <new_line>
| <while_statement> <new_line>
| <for_statement> <new_line>
| <export_statement> <new_line>if_statement
<if_statement> 表示 if 语句,根据不同的条件,包含 if、else 和 elif 子句
::= <if_expression> <content_block> <end_expression>
| <if_expression> <content_block> <else_expression> <content_block> <end_expression>
| <if_expression> <content_block> { <elif_expression> <content_block> }* <end_expression>
| <if_expression> <content_block> { <elif_expression> <content_block> }* <else_expression> <content_block> <end_expression>if_expression
<if_expression> 表示 if 语句的条件部分,例如 "w:IF (condition)"
::= "w:IF" <left_paren> <expression> <right_paren> <new_line>elif_expression
<elif_expression> 表示 elif 语句,通常跟在 if 后面进行条件判断
::= "w:ELIF" <left_paren> <expression> <right_paren> <new_line>else_expression
<else_expression> 表示 else 语句,用于处理所有不满足 if 和 elif 的情况
::= "w:ELSE" <new_line>end_expression
<end_expression> 表示结束语句,用于标识 if 语句块的结束
::= "w:END" <new_line>set_statement
<set_statement> 表示赋值语句,用于给变量赋值
::= "w:SET" <identifier_body> <equals_operator> <expression> <new_line>while_statement
<while_statement> 表示 while 循环,循环条件是表达式
::= "w:WHILE" <left_paren> <expression> <right_paren> <content_block> <end_expression>for_statement
<for_statement> 表示 for 循环语句,包含循环的条件表达式和循环体
::= <for_expression> <content_block> <end_expression>for_expression
<for_expression> 表示 for 循环表达式,包含初始化、条件和更新部分
::= "w:FOR" <left_paren> <for_condition_expression> <right_paren> <new_line>for_condition_expression
<for_condition_expression> 表示 for 循环的三个部分:初始化、条件和更新语句
::= <for_initializer> <semicolon> <for_condition> <semicolon> <for_update>for_initializer
<for_initializer> 表示初始化语句,例如 var1 = 0
::= <set_statement>for_condition
<for_condition> 表示循环的条件表达式,例如 var1 < 3
::= <expression>for_update
<for_update> 表示更新语句,通常是变量的自增或其他更新操作
::= <set_statement> | <expression>range_expression
<range_expression> 表示一个范围迭代的表达式,例如 [0 ~ 5]
::= "[" <range_start> <range_operator> <range_end> "]"range_operator
<range_operator> 表示范围的分隔符,通常用于定义开始和结束的区间,例如 [0 ~ 5]
::= "~"range_start
<range_start> 表示范围的起始值
::= <expression>range_end
<range_end> 表示范围的结束值
::= <expression>to_operator
<to_operator> 表示范围的连接符,定义区间范围的开始和结束
::= "to"break_statement
<break_statement> 表示在循环中跳出,提前结束循环
::= "w:BREAK" <new_line>content_block
<content_block> 表示语句块,包含多个文本行或语句行
::= { <text_line> | <statement_line> }*text_line
<text_line> 表示一行文本,允许任意字符
::= <any_character>* <new_line>statement_line
<statement_line> 表示语句行,可以是任意的语句,例如 if 语句、while 语句、break 语句等
::= <set_statement>
| <break_statement>
| <export_statement>
| <if_statement>
| <while_statement>
| <for_statement>export_statement
<export_statement> 表示导出语句,允许将某些内容导出
::= "w:EXPORT" <left_paren> <export_argument_list> <right_paren>export_argument_list
<export_argument_list> 表示导出参数列表,包含导出关键字和实际的导出参数
::= <export_keyword> <comma> { <export_argument> }*log_statement
::= "w:LOG" <left_paren> <log_argument_list> <right_paren>log_argument_list
::= <log_keyword> <comma> { <log_argument> }*log_keyword
<export_keyword> 表示导出关键字,仅能出现在参数列表的第一个参数中
::= "GLOBAL" | "GLOBAL_DAEMON" | "GLOBAL_WORKFLOW"
| "GLOBAL_OPERATION" | "GLOBAL_SCRIPT"export_argument
<export_argument> 表示导出的参数,可以选择性地使用 "AS" 给参数别名
::= <identifier_body> {"AS" <argument_alias>}?argument_alias
<argument_alias> 表示给导出参数设置的别名
::= <identifier_body>identifier_body
<identifier_body> 表示标识符的主体,标识符由字母和数字组成
::= <identifier_start> { <identifier_part> }*identifier_start
<identifier_start> 表示标识符的起始字符,可以是字母
::= A-Z | a-zidentifier_part
<identifier_part> 表示标识符的后续部分,可以是字母或数字
::= A-Z | a-z | 0-9expression
<expression> 表示表达式,可以是算术表达式、逻辑表达式、比较表达式、变量、常量或函数调用表达式
::= <arithmetic_expression>
| <logical_expression>
| <comparison_expression>
| <variable>
| <constant>
| <function_expression>arithmetic_expression
<arithmetic_expression> 表示算术表达式,支持加、减、乘、除和一元减法
::= <expression> <plus_sign> <expression>
| <expression> <minus_sign> <expression>
| <expression> <asterisk> <expression>
| <expression> <solidus> <expression>
| <minus_sign> <expression>logical_expression
<logical_expression> 表示逻辑表达式,支持与、或和非运算符
::= <expression> <logical_operator> <expression>
| <not_operator> <expression>comparison_expression
<comparison_expression> 表示比较表达式,支持常见的比较运算符:小于、小于等于、等于、大于、大于等于、不等于
::= <expression> <less_than_operator> <expression>
| <expression> <less_than_or_equal_operator> <expression>
| <expression> <equals_operator> <expression>
| <expression> <greater_than_operator> <expression>
| <expression> <greater_than_or_equal_operator> <expression>
| <expression> <not_equals_operator> <expression>constant
<constant> 表示常量,可以是数字、字符串或布尔值
::= <number> | <string_literal> | <boolean_literal>number
<number> 表示数字,由一个或多个数字组成
::= <digit> { <digit> }*string_literal
<string_literal> 表示字符串字面量,用双引号包围
::= "\"" <any_character>* "\""boolean_literal
<boolean_literal> 表示布尔字面量,只有 TRUE 或 FALSE 两个值
::= "TRUE" | "FALSE"digit
<digit> 表示一个数字
::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9plus_sign
<plus_sign> 表示加号运算符
::= "+"minus_sign
<minus_sign> 表示减号运算符
::= "-"asterisk
<asterisk> 表示乘号运算符
::= "*"1. SET 语句
w:SET (x = 10)
w:SET (y = 20 + x)
w:SET (result = (x + y) * 2)
w:SET (flag = TRUE)2. IF 语句
2.1. 简单的 IF 语句:
w:IF (x > 5)
The value of x is {{x}}.
w:SET (y = 10)
w:END2.2. 带有 ELSE 的 IF 语句:
w:IF (x > 5)
The value of x is {{x}}.
w:SET (y = 10)
w:ELSE
The value of x is not greater than 5.
w:SET (y = 20)
w:END2.3. 带有 ELIF 和 ELSE 的 IF 语句:
w:IF (x > 5)
The value of x is {{x}}.
w:SET (y = 10)
w:ELIF (x == 5)
x is equal to 5.
w:SET (y = 15)
w:ELSE
x is less than 5.
w:SET (y = 20)
w:END3. WHILE 语句
3.1. 基本的 WHILE 语句:
w:WHILE (x > 0)
Decreasing x: {{x}}
w:SET (x = x - 1)
w:END3.2. 带有文本和赋值语句的 WHILE 语句:
w:WHILE (y < 10)
The current value of y is {{y}}.
w:SET (y = y + 2)
w:END3.3. 带有条件判断和文本的 WHILE 语句:
w:WHILE (z != 0)
z is not zero.
w:SET (z = z - 1)
w:END3.4. 带有 BREAK 的 WHILE 循环:
w:WHILE (y < 10)
The current value of y is {{y}}.
w:SET (y = y + 2)
w:IF (y == 5)
w:BREAK
w:END
w:END4. FOR 语句
4.1. 带范围的 FOR 循环:
w:FOR (i : [0 ~ 2])
Current value of i is {{i}}
w:END4.2. 带有 BREAK 控制语句的 FOR 循环:
w:FOR (i : [0 ~ 2])
Print value: {{i}}
w:IF (i == 1)
w:BREAK
w:END
w:END4.3. 带有集合的 FOR 循环:
w:FOR (book : books)
Print book name: {{book}}
w:END4.4. 带有 BREAK 的 FOR 循环:
w:FOR (i = 0; i < 10; ++i)
Print value of i: {{i}}
w:IF (i == 5)
w:BREAK
w:END
w:END5. EXPORT 语句
下面语句可以在其他操作访问E_VAR和E_OTHER_VAR变量。
w:EXPORT (GLOBAL_WORKFLOW, my_variable as E_VAR, another_var AS E_OTHER_VAR)设置文件日志的中的业务编号和业务类型
w:set (Business_Category = "")
w:set (Business_Number = "850-")
w:export (GLOBAL_WORKFLOW, Business_Category AS E_BUSINESS_CATEGORY, Business_Number AS E_BUSINESS_NUMBER)其中E_BUSINESS_CATEGORY是业务类型,E_BUSINESS_NUMBER是业务编号
