-
Notifications
You must be signed in to change notification settings - Fork 11
Mapping
VladD2 edited this page Jul 8, 2016
·
5 revisions
syntax NamespaceMember
{
...
| MapSyntax = "map" "syntax" RuleName=QualifiedReference ParametersOpt=MapSyntaxParameters? "->" AstName=NitraType MapSyntaxBody;
}
syntax MapSyntaxParameters = "(" (RuleMethodParam; ",")* ")";
syntax RuleMethodParam = Name ":" Type=NitraType;
syntax MapSyntaxBody
{
| Empty = ";"
| Expression1 = "{" inl Expr=MapSyntaxExpression "}"
| Expression2 = "->" Expr=MapSyntaxExpression
| Inline = "=" Code=MapSyntaxCode
| Extensions = "{" Extensions=MapExtension+ "}"
{
syntax MapExtension = "|" Reference Body=MapSyntaxBody
}
| PerMember = "{" Members=MapSyntaxExpressionAstMember* "}"
}
syntax MapSyntaxExpressionAstMember
{
| ParseTreeFieldExpressionMapping = Expr=MapSyntaxExpression sm "->" sm AstPropertyName=Reference ";" nl
| ParseTreeFieldCodeMapping = FieldName=Reference sm "=" sm Code=MapSyntaxCode nl
}
syntax MapSyntaxExpression
{
| Braces = "(" Expr=MapSyntaxExpression ")"
| This = "this"
| Identifier = !(ReservedWords !IdentifierPartCharacters) Reference
| Ast = QualifiedReference "{" inl Members=MapSyntaxExpressionAstMember* "}"
| List = "[" (ItemExpr=MapSyntaxExpression; ",")* "]"
| OptionSome = "Some" "(" ValueExpr=MapSyntaxExpression ")"
| OptionNone = "None" "(" ")"
| Match = "match" "(" Expr=MapSyntaxExpression ")" "{" "|"? (MatchCase; "|")+ "}"
{
syntax MatchCase
{
| Inline = Pattern "=" Code=MapSyntaxCode
| Expression = Pattern "->" Expr=MapSyntaxExpression
}
}
| Fold = "fold" "(" ItemName=Name "in" ItemExpr=MapSyntaxExpression
";" AccumulatorName1=Name "=" InitExpr=MapSyntaxExpression
";" AccumulatorName2=Reference "=" EachExpr=MapSyntaxExpression
")"
| DefineVariable = "let" Name ":" NitraType "=" Expr=MapSyntaxExpression "in" Body=MapSyntaxExpression
precedence TypeHint:
| TypeHint = Expr=MapSyntaxExpression ":" NitraType
precedence Call:
| Call = Expr=MapSyntaxExpression "(" (ArgumentExpr=MapSyntaxExpression; ",")* ")"
precedence MemberAccess:
| MemberAccess = Expr=MapSyntaxExpression "." Reference
}