Navascript ::= DebugDefinition? TopLevelStatement* Finally? EOF DebugDefinition ::= DEBUG "=" ( ALL | REQUEST | RESPONSE ) Methods ::= METHODS "{" DefinedMethod* "}" DefinedMethod ::= DOUBLE_QUOTE ScriptIdentifier DOUBLE_QUOTE ";" Finally ::= FINALLY "{" TopLevelStatement* "}" TopLevelStatement ::= Include | Message | Var | Break | Map | AntiMessage | Define | ConditionalEmptyMessage | Synchronized | Print | Log | Loop | Methods Define ::= DEFINE DOUBLE_QUOTE Identifier DOUBLE_QUOTE ( ":" | "=" ) Expression ";" Include ::= Conditional? INCLUDE DOUBLE_QUOTE ScriptIdentifier DOUBLE_QUOTE ";" Print ::= Conditional? PRINT "(" Expression ")" ";" Log ::= Conditional? LOG "(" Expression ")" ";" InnerBody ::= Property | MethodOrSetter | TopLevelStatement InnerBodySelection ::= Option | MethodOrSetter | TopLevelStatement Checks ::= Check* Check ::= Conditional? CHECK "(" CheckAttributes ")" "=" Expression ";" CheckAttributes ::= CheckAttribute ( "," CheckAttribute)? CheckAttribute ::= ("code" LiteralOrExpression) | ("description" LiteralOrExpression) LiteralOrExpression ::= ( "=" Expression )? Break ::= ( Conditional )? BREAK ( "(" BreakParameters? ")" )? ";" BreakParameter ::= ( "code" LiteralOrExpression | "description" LiteralOrExpression | "error" LiteralOrExpression ) BreakParameters ::= BreakParameter ( "," BreakParameter )? Conditional ::= IF Expression THEN Var ::= ( Conditional )? VAR VarIdentifier ( "(" VarArguments ")" )? ( "=" ConditionalExpressions ";" | "{" MappedArrayField "}" | "{" MappedArrayMessage "}" | "[" VarArray? "]" | "{" Var* "}" ) VarArray ::= VarArrayElement ("," VarArrayElement)* VarArrayElement ::= "{" Var* "}" VarArguments ::= VarArgument ( "," VarArgument )* VarArgument ::= ( VarType | VarMode ) VarType ::= "type" ( ":" | "=" ) ( MessageType | PropertyTypeValue ) VarMode ::= "mode" ( ":" | "=" ) MessageMode ConditionalExpressions ::= (( Conditional ( Expression ) )* ELSE ( Expression ) | ( Expression ) ) AntiMessage ::= Conditional? ANTIMESSAGE DOUBLE_QUOTE MsgIdentifier DOUBLE_QUOTE ";" ConditionalEmptyMessage ::= Conditional "{" InnerBody* "}" Synchronized ::= SYNCHRONIZED "(" SynchronizedArguments ")" "{" TopLevelStatement* "}" SynchronizedArguments ::= SynchronizedArgument ( "," SynchronizedArgument )* SynchronizedArgument ::= ( SContext | SKey | STimeout | SBreakOnNoLock ) SContext ::= CONTEXT ( ":" | "=" ) SContextType SKey ::= KEY LiteralOrExpression STimeout ::= TIMEOUT ( ":" | "=" ) Expression SBreakOnNoLock ::= BREAKONNOLOCK ( ":" | "=" ) Expression Message ::= ( Conditional )? MESSAGE DOUBLE_QUOTE MsgIdentifier DOUBLE_QUOTE ( "(" MessageArguments ")" )? ( ";" | ( "{" ( MappedArrayField | MappedArrayMessage | InnerBody* ) "}" ) | "[" MessageArray? "]" ) MessageArray ::= MessageArrayElement ("," MessageArrayElement)* MessageArrayElement ::= "{" InnerBody* "}" Property ::= ( Conditional )? PROPERTY DOUBLE_QUOTE PropertyName DOUBLE_QUOTE ( "(" PropertyArguments ")" )? ( ";" | "=" ConditionalExpressions ";" | "[" SelectionArray "]" | "{" MappedArrayFieldSelection "}" | "{" MappedArrayMessageSelection "}" )? SelectionArray ::= SelectionArrayElement ("," SelectionArrayElement)* SelectionArrayElement ::= "{" InnerBodySelection* "}" Option ::= ( Conditional )? OPTION ("name" | "value" | "selected" ) ( "=" ConditionalExpressions ";" )? PropertyArgument ::= ( PropertyType | PropertySubType | PropertyDescription | PropertyLength | PropertyDirection | PropertyCardinality ) PropertyType ::= "type" ( ":" | "=" ) PropertyTypeValue PropertySubType ::= "subtype" ( ":" | "=" ) Identifier PropertyCardinality ::= "cardinality" ( ":" | "=" ) PropertyCardinalityValue PropertyDescription ::= "description" LiteralOrExpression PropertyLength ::= "length" ( ":" | "=" ) IntegerLiteral PropertyDirection ::= "direction" ( ":" | "=" ) ( PropertyDirectionValue | Expression ) PropertyArguments ::= PropertyArgument ( "," PropertyArgument )* MessageArgument ::= ( "type" ( ":" | "=" ) MessageType ) | ("mode" ( ":" | "=" ) MessageMode ) | ( "orderby" ( ":" | "=" ) OrderByArguments ) OrderByArguments ::= PropertyName OrderByMode? ( "," PropertyName OrderByMode? )* MessageArguments ::= MessageArgument ( "," MessageArgument )* KeyValueArguments ::= ParamKeyName LiteralOrExpression ( "," ParamKeyName LiteralOrExpression )* Map ::= ( Conditional )? ( "map." AdapterName ( "(" KeyValueArguments? ")" )? | "map" "(" "object:" DOUBLE_QUOTE ClassName DOUBLE_QUOTE ( "," KeyValueArguments )? ")" ) ( ";" | "{" InnerBody* "}" ) MethodOrSetter ::= ( Conditional )? (AdapterMethod | SetterField) SetterField ::= ( Conditional )? "$" FieldName ( "=" ConditionalExpressions ";" | ("(" KeyValueArguments ")")? "{" MappedArrayMessage "}" | MappedMessage | "{" MappedArrayField "}" ) AdapterMethod ::= ( Conditional )? "." MethodName "(" KeyValueArguments? ")" ";" Loop ::= Conditional? LOOP ( MappableIdentifier | InputMsgIdentifier | OutputMsgIdentifier | InputParamMsgIdentifier | Identifier ) ("(" FILTER "=" Expression ")" )? "{" InnerBody* "}" MappedArrayField ::= MappableIdentifier ("(" FILTER "=" Expression ")" )? "{" InnerBody* "}" MappedArrayMessage ::= ( InputMsgIdentifier | OutputMsgIdentifier | InputParamMsgIdentifier | RestrictedIdentifier ) ("(" FILTER "=" Expression ")" )? "{" InnerBody* "}" MappedMessage ::= "{" InnerBody* "}" MappedArrayFieldSelection ::= MappableIdentifier ("(" FILTER "=" Expression ")" )? "{" InnerBodySelection* "}" MappedArrayMessageSelection ::= "[" MsgIdentifier "]" ("(" FILTER "=" Expression ")" )? "{" InnerBodySelection* "}" MappableIdentifier ::= "$" ( ParentMsg )* Identifier ( Arguments )? ExpressionLiteral ::= "`" ( Expression )* "`" FunctionLiteral ::= Identifier Arguments ForallLiteral ::= SARTRE "(" TmlLiteral "," ExpressionLiteral ")" Arguments ::= "(" ( Expression ( "," Expression )*) ? ")" Operand ::= NULL | TRUE | FALSE | ForallLiteral | TODAY | FunctionLiteral | IntegerLiteral | StringLiteral | FloatLiteral | DATE_PATTERN | OutputTmlIdentifier | InputTmlIdentifier | MappableIdentifier | ExistsTmlIdentifier | ExistsOutputTmlIdentifier | ScriptReference | Identifier Expression ::= "#" DefinedExpression | OrExpression DefinedExpression ::= Identifier OrExpression ::= AndExpression ( OR AndExpression )* AndExpression ::= EqualityExpression ( AND EqualityExpression )* EqualityExpression ::= RelationalExpression ( ( EQ RelationalExpression ) | ( NEQ RelationalExpression ) | (LIKE RelationalExpression ) )* RelationalExpression ::= AdditiveExpression ( ( LT AdditiveExpression ) | ( LET AdditiveExpression ) | ( GT AdditiveExpression ) | ( GET AdditiveExpression ) )* AdditiveExpression ::= MultiplicativeExpression ( ( PLUS MultiplicativeExpression ) | ( MIN MultiplicativeExpression ) )* MultiplicativeExpression ::= UnaryExpression ( ( MULT UnaryExpression ) | ( DIV UnaryExpression ) | (MOD UnaryExpression ) )* UnaryExpression ::= ( "!" UnaryExpression | MIN UnaryExpression | PrimaryExpression ) PrimaryExpression ::= Operand | "(" Expression ")" Ignore ::= WhiteSpace | Comment /* ws: definition */ EOF ::= $ LETTER ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" DIGIT ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" SYMBOL ::= " " | "\n" | "\t" | "!" | "@" | "$" | "#" | "%" | "^" | "&" | "*" | "(" | ")" | "-" | "_" | "=" | "+" | "{" | "}" | "[" | "]" | ":" | ";" | "\" | "/" | "|" | "<" | ">" | "\'" | "," | "." | "?" | "§" | "±" | "~" | "`" DOUBLE_QUOTE ::= '"' INCLUDE ::= "include" MESSAGE ::= "message" PRINT ::= "print" LOG ::= "log" ANTIMESSAGE ::= "antimessage" PROPERTY ::= "property" OPTION ::= "option" DEFINE ::= "define" METHODS ::= "methods" FINALLY ::= "finally" CHECK ::= "check" BREAK ::= "break" SYNCHRONIZED ::= "synchronized" CONTEXT ::= "context" KEY ::= "key" TIMEOUT ::= "timeout" BREAKONNOLOCK ::= "breakOnNoLock" TODAY ::= "TODAY" VAR ::= "var" IF ::= "if" THEN ::= "then" ELSE ::= "else" AND ::= "AND" OR ::= "OR" PLUS ::= "+" MULT ::= "*" DIV ::= "/" MOD ::= "%" MIN ::= "-" LT ::= "<" LET ::= "<=" GT ::= ">" GET ::= ">=" EQ ::= "==" LIKE ::= "~=" NEQ ::= "!=" FILTER ::= "filter" LOOP ::= "loop" DEBUG ::= "@debug" TRUE ::= "true" FALSE ::= "false" PARENT ::= "../" ALL ::= "all" REQUEST ::= "request" RESPONSE ::= "response" CHARACTER ::= LETTER | DIGIT | SYMBOL DATE_PATTERN ::= (IntegerLiteral | OutputTmlIdentifier | InputTmlIdentifier ) "#" (IntegerLiteral | OutputTmlIdentifier | InputTmlIdentifier) "#" (IntegerLiteral | OutputTmlIdentifier | InputTmlIdentifier) "#" (IntegerLiteral | OutputTmlIdentifier | InputTmlIdentifier) "#" (IntegerLiteral | OutputTmlIdentifier | InputTmlIdentifier) "#" (IntegerLiteral | OutputTmlIdentifier | InputTmlIdentifier) Identifier ::= IDENTIFIER_DEF - ForbiddenKeyword RestrictedIdentifier ::= IDENTIFIER_DEF - Keyword IDENTIFIER_DEF ::= ( LETTER | "_" ) ( LETTER | DIGIT | "_" | "$" )* VarName ::= Identifier ParamKeyName ::= Identifier AdapterName ::= Identifier ClassName ::= LETTER+ ( "." LETTER+)* MethodName ::= Identifier FieldName ::= ParentMsg* Identifier PropertyName ::= Identifier NameOption ::= ":name" ValueOption ::= ":value" SelectedOption ::= ":selected" ParentMsg ::= PARENT ParentVar ::= PARENT IntegerLiteral ::= "0" | ( ( "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ) ( DIGIT )* ) FloatLiteral ::= ( "0" | IntegerLiteral ) "." ( DIGIT )* StringLiteral ::= "'" StringCharacters? "'" StringCharacters ::= StringCharacter+ StringCharacter ::= InputCharacter - ( "'" | '\' ) | EscapeSequence TmlLiteral ::= "'" ( MsgIdentifier )* "'" ExistsTmlIdentifier ::= "?" ( InputTmlIdentifier ) ExistsOutputTmlIdentifier ::= "?" ( OutputTmlIdentifier ) ScriptReference ::= "script:" "/" ScriptIdentifier ScriptIdentifier ::= Identifier ( "/" Identifier )* MsgElementIdentifier ::= Identifier ( "@" DIGIT | "@" Identifier "=" CHARACTER )? InputMsgIdentifier ::= "[" MsgIdentifier "]" InputParamMsgIdentifier ::= "[" ParamIdentifier "]" OutputMsgIdentifier ::= DOUBLE_QUOTE MsgIdentifier DOUBLE_QUOTE MsgIdentifier ::= ( "/" | ParentMsg* ) MsgElementIdentifier ( "/" MsgElementIdentifier )* VarIdentifier ::= ( "/" | ParentVar* )? VarName PropertyIdentifier ::= ( MsgIdentifier )? Identifier ( NameOption | ValueOption | SelectedOption )? ParamIdentifier ::= ( "/@" | "@" ) Identifier InputTmlIdentifier ::= "[" ( ParamIdentifier | MsgIdentifier | PropertyIdentifier | '.' ) "]" OutputTmlIdentifier ::= '"' ( ParamIdentifier | MsgIdentifier | PropertyIdentifier | '.' ) '"' PropertyDirectionValue ::= "in" | "out" | "inout" PropertyCardinalityValue ::= "+" | "1" MessageType ::= "array" | "simple" | "arrayelement" MessageMode ::= "ignore" | "overwrite" OrderByMode ::= "ASC" | "asc" | "DESC" | "desc" SContextType ::= ( "user" | "service" ) PropertyTypeValue ::= ( "boolean" | "string" | "date" | "float" | "clocktime" | "coordinate" | "list" | "integer" | "timestamp" | "binary" | "selection" | "memo" | "money" | "percentage" | "password" ) SARTRE ::= ( "FORALL" | "EXISTS" ) NULL ::= "null" ForbiddenKeyword ::= TODAY | IF | THEN | ELSE | AND | OR | TRUE | FALSE | SARTRE | NULL | PropertyDirectionValue Keyword ::= MESSAGE | TODAY | IF | THEN | ELSE | AND | OR | TRUE | FALSE | SARTRE | NULL | PropertyDirectionValue | LOOP | "map" | INCLUDE | PRINT | LOG | ANTIMESSAGE | PROPERTY | DEFINE | METHODS | BREAK | SYNCHRONIZED | VAR WhiteSpace ::= ' ' | #x0009 | #x000C | LineTerminator Comment ::= TraditionalComment | EndOfLineComment TraditionalComment ::= '/*' ( CHARACTER | "'" | WhiteSpace | '"' )* '*/' EndOfLineComment ::= '//' ( CHARACTER | "'" | '"' ) * SourceCharacter ::= . LineContinuation ::= '\' LineTerminatorSequence InputCharacter ::= UnicodeInputCharacter UnicodeInputCharacter ::= UnicodeEscape | RawInputCharacter UnicodeEscape ::= '\' UnicodeMarker HexDigit HexDigit HexDigit HexDigit UnicodeMarker ::= 'u'+ HexDigit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' RawInputCharacter ::= [#x0001-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] LineTerminatorSequence ::= #x000D #x000A | #x000A | #x000D | #x2028 | #x2029 LineTerminator ::= #x000A | #x000D | #x2028 | #x2029 EscapeSequence ::= BackSlash 'b' | BackSlash 't' | BackSlash 'n' | BackSlash 'f' | BackSlash 'r' | BackSlash '"' | BackSlash "'" | BackSlash BackSlash | OctalEscape BackSlash ::= '\' ( UnicodeMarker '005' [cC] )? OctalDigit ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' OctalEscape ::= '\' OctalDigit | '\' OctalDigit OctalDigit | '\' ZeroToThree OctalDigit OctalDigit ZeroToThree ::= '0' | '1' | '2' | '3'