Skip to content

脚本使用手册 - 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-z

identifier_part

<identifier_part> 表示标识符的后续部分,可以是字母或数字

::= A-Z | a-z | 0-9

expression

<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 | 9

plus_sign

<plus_sign> 表示加号运算符

::= "+"

minus_sign

<minus_sign> 表示减号运算符

::= "-"

asterisk

<asterisk> 表示乘号运算符

::= "*"

1. SET 语句

Go
w:SET (x = 10)
w:SET (y = 20 + x)
w:SET (result = (x + y) * 2)
w:SET (flag = TRUE)

2. IF 语句

2.1. 简单的 IF 语句:

Go
w:IF (x > 5)
    The value of x is {{x}}.
    w:SET (y = 10)
w:END

2.2. 带有 ELSEIF 语句:

Go
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:END

2.3. 带有 ELIFELSEIF 语句:

Go
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:END

3. WHILE 语句

3.1. 基本的 WHILE 语句:

Go
w:WHILE (x > 0)
    Decreasing x: {{x}}
    w:SET (x = x - 1)
w:END

3.2. 带有文本和赋值语句的 WHILE 语句:

Go
w:WHILE (y < 10)
    The current value of y is {{y}}.
    w:SET (y = y + 2)
w:END

3.3. 带有条件判断和文本的 WHILE 语句:

Go
w:WHILE (z != 0)
    z is not zero.
    w:SET (z = z - 1)
w:END

3.4. 带有 BREAKWHILE 循环:

Go
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:END

4. FOR 语句

4.1. 带范围的 FOR 循环:

Go
w:FOR (i : [0 ~ 2])
    Current value of i is {{i}}
w:END

4.2. 带有 BREAK 控制语句的 FOR 循环:

Go
w:FOR (i : [0 ~ 2])
    Print value: {{i}}
    w:IF (i == 1)
        w:BREAK
    w:END
w:END

4.3. 带有集合的 FOR 循环:

Go
w:FOR (book : books)
    Print book name: {{book}}
w:END

4.4. 带有 BREAKFOR 循环:

Go
w:FOR (i = 0; i < 10; ++i)
    Print value of i: {{i}}
    w:IF (i == 5)
        w:BREAK
    w:END
w:END

5. EXPORT 语句

下面语句可以在其他操作访问E_VAR和E_OTHER_VAR变量。

Go
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是业务编号