@@ -49,15 +49,15 @@ parameterDefaultValue -> "=" expression
4949
5050typeDecl -> decorator* "type" IDENTIFIER(name) "=" typeExpression NL
5151
52- varDecl -> decorator* "var" IDENTIFIER(name) "=" expression NL
52+ varDecl -> decorator* "var" IDENTIFIER(name) typeExpression? "=" expression NL
5353
5454resourceDecl -> decorator* "resource" IDENTIFIER(name) interpString(type) "existing"? "=" (ifCondition | object | forExpression) NL
5555
5656moduleDecl -> decorator* "module" IDENTIFIER(name) interpString(type) "=" (ifCondition | object | forExpression) NL
5757
5858testDecl -> "test" IDENTIFIER(name) interpString(type) "=" (object) NL
5959
60- assertDecl -> decorator* "assert" IDENTIFIER(name) "=" expression NL
60+ assertDecl -> "assert" IDENTIFIER(name) "=" expression NL
6161
6262outputDecl ->
6363 decorator* "output" IDENTIFIER(name) IDENTIFIER(type) "=" expression NL
@@ -127,7 +127,7 @@ primaryExpression ->
127127 functionCall |
128128 literalValue |
129129 interpString |
130- multilineString |
130+ interpMultilineString |
131131 array |
132132 forExpression |
133133 object |
@@ -155,13 +155,18 @@ forExpression -> "[" "for" (IDENTIFIER(item) | forVariableBlock) "in" expression
155155forVariableBlock -> "(" IDENTIFIER(item) "," IDENTIFIER(index) ")"
156156forBody -> expression(body) | ifCondition
157157
158- interpString -> stringLeftPiece ( expression stringMiddlePiece )* expression stringRightPiece | stringComplete
158+ interpString -> ( stringLeftPiece ( expression stringMiddlePiece )* expression stringRightPiece ) | stringComplete
159159stringLeftPiece -> "'" STRINGCHAR* "${"
160160stringMiddlePiece -> "}" STRINGCHAR* "${"
161161stringRightPiece -> "}" STRINGCHAR* "'"
162162stringComplete -> "'" STRINGCHAR* "'"
163163
164- multilineString -> "'''" + MULTILINESTRINGCHAR+ + "'''"
164+ interpMultilineString -> ( interpMultilineStringLeftPiece ( expression interpMultilineStringMiddlePiece )* expression interpMultilineStringRightPiece ) | multilineString
165+ interpMultilineStringLeftPiece -> "$"+ "'''" MULTILINESTRINGCHAR* "$"+ "{"
166+ interpMultilineStringMiddlePiece -> "}" MULTILINESTRINGCHAR* "$"+ "{"
167+ interpMultilineStringRightPiece -> "}" MULTILINESTRINGCHAR* "'''"
168+
169+ multilineString -> "'''" MULTILINESTRINGCHAR* "'''"
165170
166171literalValue -> NUMBER | "true" | "false" | "null"
167172
@@ -198,6 +203,7 @@ primaryTypeExpression ->
198203typeReference ->
199204 ambientTypeReference |
200205 fullyQualifiedAmbientTypeReference |
206+ resourceDerivedType |
201207 IDENTIFIER(type) |
202208 IDENTIFIER(importedType) |
203209 IDENTIFIER(wildcardImport) "." IDENTIFIER(type) |
@@ -209,6 +215,8 @@ ambientTypeReference -> "string" | "int" | "bool" | "array" | "object"
209215
210216fullyQualifiedAmbientTypeReference -> IDENTIFIER(sysNamespace) "." ambientTypeReference
211217
218+ resourceDerivedType -> ( "resourceInput" | "resourceOutput" ) "<" interpString(type) ">"
219+
212220objectType -> "{" (NL+ ((objectTypeProperty | objectTypeAdditionalPropertiesMatcher) NL+ )* )? "}"
213221objectTypeProperty -> decorator* ( IDENTIFIER(name) | stringComplete | multilineString ) ":" typeExpression
214222objectTypeAdditionalPropertiesMatcher -> decorator* "*:" typeExpression
0 commit comments