forked from cjllanwarne/winstanley
-
Notifications
You must be signed in to change notification settings - Fork 4
/
wdl.bnf
95 lines (76 loc) · 4.68 KB
/
wdl.bnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
{
parserClass="winstanley.parser.WdlParser"
extends="com.intellij.extapi.psi.ASTWrapperPsiElement"
psiClassPrefix="Wdl"
psiImplClassSuffix="Impl"
psiPackage="winstanley.psi"
psiImplPackage="winstanley.psi.impl"
elementTypeHolderClass="winstanley.psi.WdlTypes"
elementTypeClass="winstanley.psi.WdlElementType"
tokenTypeClass="winstanley.psi.WdlTokenType"
psiImplUtilClass="winstanley.psi.impl.WdlPsiImplUtil"
}
// Regenerate from IntelliJ using Grammar-Kit plugin and COMMAND-SHIFT-G
wdlFile ::= import_stmt* (task_block|workflow_block|COMMENT)*
import_stmt ::= IMPORT string_literal import_namespace?
import_namespace ::= AS IDENTIFIER
workflow_block ::= WORKFLOW WORKFLOW_IDENTIFIER_DECL LBRACE wf_body_element* RBRACE
wf_body_element ::= call_block | declaration | while_loop | if_stmt | scatter_block | wf_outputs
call_block ::= CALL fqn alias? (LBRACE call_body RBRACE)?
call_body ::= declaration* call_input*
call_input ::= INPUT COLON (mapping (COMMA mapping)*)?
mapping ::= IDENTIFIER EQUAL expression
alias ::= AS IDENTIFIER
wf_outputs ::= OUTPUT LBRACE wf_output* RBRACE
wf_output ::= wf_output_declaration | wf_output_wildcard_statement
wf_output_declaration ::= type_e IDENTIFIER EQUAL expression
wf_output_wildcard_statement ::= fqn wf_output_wildcard?
wf_output_wildcard ::= DOT ASTERISK
while_loop ::= WHILE LPAREN expression RPAREN LBRACE wf_body_element* RBRACE
if_stmt ::= IF LPAREN expression RPAREN LBRACE wf_body_element* RBRACE
scatter_declaration ::= SCATTER LPAREN IDENTIFIER IN expression RPAREN {mixin="winstanley.psi.impl.WdlNamedElementImpl" implements="winstanley.psi.WdlNamedElement" methods=[getName getNameIdentifier setName]}
scatter_block ::= scatter_declaration LBRACE wf_body_element* RBRACE
task_block ::= TASK TASK_IDENTIFIER_DECL LBRACE declaration* sections* RBRACE
sections ::= command_block|task_outputs|runtime_block|parameter_meta_block|meta_block
command_block ::= COMMAND COMMAND_DELIMITER_OPEN (COMMAND_CHAR|command_var)* COMMAND_DELIMITER_CLOSE
command_var ::= COMMAND_VAR_OPENER command_var_option* expression RBRACE
primitive_value ::= string_literal | BOOLEAN | float_value | integer_value
command_var_option_sep ::= COMMAND_ATTR_SEP EQUAL primitive_value
command_var_option_default ::= COMMAND_ATTR_DEFAULT EQUAL primitive_value
command_var_option_true_false ::= COMMAND_ATTR_TRUE primitive_value COMMAND_ATTR_FALSE primitive_value
command_var_option_false_true ::= COMMAND_ATTR_FALSE primitive_value COMMAND_ATTR_TRUE primitive_value
command_var_option ::= command_var_option_sep|command_var_option_default|command_var_option_false_true|command_var_option_true_false
task_outputs ::= OUTPUT LBRACE output_kv* RBRACE
output_kv ::= type_e IDENTIFIER EQUAL expression
runtime_block ::= RUNTIME map
parameter_meta_block ::= PARAMETER_META map
meta_block ::= META map
declaration ::= type_e IDENTIFIER setter? {mixin="winstanley.psi.impl.WdlNamedElementImpl" implements="winstanley.psi.WdlNamedElement" methods=[getName getNameIdentifier setName]}
setter ::= EQUAL expression
map ::= LBRACE kv* RBRACE
kv ::= IDENTIFIER COLON expression
type_e ::= (OBJECT_TYPE | PRIMITIVE_TYPE | map_expression | array_expression | pair_expression ) QMARK?
array_expression ::= ARRAY_TYPE LSQUARE type_e RSQUARE PLUS?
map_expression ::= MAP_TYPE LSQUARE type_e COMMA type_e RSQUARE
pair_expression ::= PAIR_TYPE LSQUARE type_e COMMA type_e RSQUARE
string_literal ::= QUOTE (QUOTE_STRING_CHAR|ESCAPE_SEQUENCE)* QUOTE
expression ::= ( function_call | array_or_member_access | object_literal | map_literal | array_literal | value |
LPAREN expression (COMMA expression)? RPAREN | LOGICAL_NOT expression | PLUS expression | DASH expression |
IF expression THEN expression ELSE expression
) expression_dash?
expression_dash ::= infix_operator expression
infix_operator ::= DOUBLE_PIPE | DOUBLE_AMPERSAND | DOUBLE_EQUAL | NOT_EQUAL | LESS_THAN | LESS_EQUAL | MORE_THAN |
MORE_EQUAL | PLUS | DASH | ASTERISK | SLASH | PERCENT
function_call ::= IDENTIFIER LPAREN (expression (COMMA expression)*)? RPAREN
array_or_member_access ::= IDENTIFIER array_or_member_access_suffix+
array_or_member_access_suffix ::= LSQUARE expression RSQUARE | DOT IDENTIFIER
object_literal ::= OBJECT LBRACE object_kv (COMMA object_kv)* RBRACE
map_literal ::= LBRACE map_kv (COMMA map_kv)* RBRACE
array_literal ::= LSQUARE expression (COMMA expression)* RSQUARE
map_kv ::= expression COLON expression
object_kv ::= IDENTIFIER COLON expression
value ::= string_literal | variable_lookup | BOOLEAN | float_value | integer_value
variable_lookup ::= IDENTIFIER {methods=[getReferences]}
float_value ::= NUMBER+ DOT NUMBER+
integer_value ::= NUMBER+
fqn ::= IDENTIFIER (DOT IDENTIFIER)*