Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions docs/grammar.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ parameterDefaultValue -> "=" expression

typeDecl -> decorator* "type" IDENTIFIER(name) "=" typeExpression NL

varDecl -> decorator* "var" IDENTIFIER(name) "=" expression NL
varDecl -> decorator* "var" IDENTIFIER(name) typeExpression? "=" expression NL

resourceDecl -> decorator* "resource" IDENTIFIER(name) interpString(type) "existing"? "=" (ifCondition | object | forExpression) NL

moduleDecl -> decorator* "module" IDENTIFIER(name) interpString(type) "=" (ifCondition | object | forExpression) NL

testDecl -> "test" IDENTIFIER(name) interpString(type) "=" (object) NL

assertDecl -> decorator* "assert" IDENTIFIER(name) "=" expression NL
assertDecl -> "assert" IDENTIFIER(name) "=" expression NL

outputDecl ->
decorator* "output" IDENTIFIER(name) IDENTIFIER(type) "=" expression NL
Expand Down Expand Up @@ -127,7 +127,7 @@ primaryExpression ->
functionCall |
literalValue |
interpString |
multilineString |
interpMultilineString |
array |
forExpression |
object |
Expand Down Expand Up @@ -155,13 +155,18 @@ forExpression -> "[" "for" (IDENTIFIER(item) | forVariableBlock) "in" expression
forVariableBlock -> "(" IDENTIFIER(item) "," IDENTIFIER(index) ")"
forBody -> expression(body) | ifCondition

interpString -> stringLeftPiece ( expression stringMiddlePiece )* expression stringRightPiece | stringComplete
interpString -> ( stringLeftPiece ( expression stringMiddlePiece )* expression stringRightPiece ) | stringComplete
stringLeftPiece -> "'" STRINGCHAR* "${"
stringMiddlePiece -> "}" STRINGCHAR* "${"
stringRightPiece -> "}" STRINGCHAR* "'"
stringComplete -> "'" STRINGCHAR* "'"

multilineString -> "'''" + MULTILINESTRINGCHAR+ + "'''"
interpMultilineString -> ( interpMultilineStringLeftPiece ( expression interpMultilineStringMiddlePiece )* expression interpMultilineStringRightPiece ) | multilineString
interpMultilineStringLeftPiece -> "$"+ "'''" MULTILINESTRINGCHAR* "$"+ "{"
interpMultilineStringMiddlePiece -> "}" MULTILINESTRINGCHAR* "$"+ "{"
interpMultilineStringRightPiece -> "}" MULTILINESTRINGCHAR* "'''"

multilineString -> "'''" MULTILINESTRINGCHAR* "'''"

literalValue -> NUMBER | "true" | "false" | "null"

Expand Down Expand Up @@ -198,6 +203,7 @@ primaryTypeExpression ->
typeReference ->
ambientTypeReference |
fullyQualifiedAmbientTypeReference |
resourceDerivedType |
IDENTIFIER(type) |
IDENTIFIER(importedType) |
IDENTIFIER(wildcardImport) "." IDENTIFIER(type) |
Expand All @@ -209,6 +215,8 @@ ambientTypeReference -> "string" | "int" | "bool" | "array" | "object"

fullyQualifiedAmbientTypeReference -> IDENTIFIER(sysNamespace) "." ambientTypeReference

resourceDerivedType -> ( "resourceInput" | "resourceOutput" ) "<" interpString(type) ">"

objectType -> "{" (NL+ ((objectTypeProperty | objectTypeAdditionalPropertiesMatcher) NL+ )* )? "}"
objectTypeProperty -> decorator* ( IDENTIFIER(name) | stringComplete | multilineString ) ":" typeExpression
objectTypeAdditionalPropertiesMatcher -> decorator* "*:" typeExpression
Expand Down
Loading