anchor.diff:  literal
       : NullLiteral
       | BooleanLiteral
  -    | tjsStringLiteral
  +    | (StringLiteral | TemplateStringLiteral)+
       | octetLiteral
       | RegularExpressionLiteral
       | numericLiteral
  -    ;
  -
  -tjsStringLiteral // tjs can use C like string literal: "part1""part2"
  -    : (StringLiteral
  -    | TemplateStringLiteral)+
  +    | Void
       ;
   
   octetLiteral
  
positive.code:     | throwStatement
      | tryStatement
      | debuggerStatement
      | functionDeclaration
      | propertyDefinition
      ;
  
  block
  
negative.code:     ;
  
  functionParameter
      : Identifier ('=' expression)?      // TJS2, ECMAScript 6: Initialization
      | Identifier? '*'
      ;
  
  arrayLiteral
      : varModifier? '[' arrayElementSeprator* elementList? arrayElementSeprator* ']'
      ;
  
  elementList
      : expression (arrayElementSeprator+ expression)*
      ;
  
  arrayElementSeprator
      : ','
      | '=>'
      ;
  
  objectLiteral
      : varModifier? '%[' objectProperty? (',' objectProperty)* ','?']'
      ;
  
  objectProperty
      : expression (':' |'=' | '=>' | ',') expression // TJS resolve object key in runtime
      ;
  
  arguments
      : '(' argument? (',' argument?)* ')'
      | '(' Ellipsis ')' // ... means use argument (JS function argument)
      ;
  
  argument
      : expression '*'?
      | '*'
      ;
  
  expressionSequence
      : expression (',' expression)*
      ;
  
  expression
      : function                                   # FunctionExpression
      | expression '[' expressionSequence ']'                 # MemberIndexExpression
      | expression '.' identifierName                         # MemberDotExpression
      | '.' identifierName                                    # WithDotExpression
      | expression arguments                                  # ArgumentsExpression
      | New expression arguments?                             # NewExpression
      | '&' expression                                        # TJSRefExpression
      | '*' expression                                        # TJSPtrExpression
      | expression '<->' expression                           # SwapExpression
  
      | expression '!'                                        # EvalExpression        // t.f incontextof 's'! => 0721 (s=%[v=>0721])
      | expression Incontextof expression                     # InContextOfExpression // a incontextof d++ => Error: object++
      | expression '++'                                       # PostIncrementExpression
      | expression '--'                                       # PostDecreaseExpression
      | expression Isvalid                                    # IsValidExpression     // t incontextof ctx isvalid => 1
      | Delete expression                                     # DeleteExpression      // delete a.c isvalid => error
      | Isvalid expression                                    # IsValidExpression     // isvalid delete a.c => 1
      | Typeof expression                                     # TypeofExpression      // typeof 1 instanceof "String" => 'Integer'
      | expression Instanceof expression                      # InstanceofExpression  // 1 instanceof "Number" isvalid => 0,isvalid 1 instanceof "String"=>1
      | Invalidate expression                                 # InvalidateExpression  // invalidate a instanceof "Number" => 0
      | '++' expression                                       # PreIncrementExpression
      | '--' expression                                       # PreDecreaseExpression // typeof 1 + 1 = 'Integer1'
      | '+' expression                                        # UnaryPlusExpression
      | '-' expression                                        # UnaryMinusExpression
      | '~' expression                                        # BitNotExpression
      | '!' expression                                        # NotExpression
      | expression ('*' | '/' | '%' | '\\') expression        # MultiplicativeExpression
      | expression ('+' | '-') expression                     # AdditiveExpression
      | expression ('<<' | '>>' | '>>>') expression           # BitShiftExpression
      | expression ('<' | '>' | '<=' | '>=') expression       # RelationalExpression
      | expression In expression                              # InExpression          // TODO: any standard for it?
      | expression ('==' | '!=' | '===' | '!==') expression   # EqualityExpression
      | expression '&' expression                             # BitAndExpression
      | expression '^' expression                             # BitXOrExpression
      | expression '|' expression                             # BitOrExpression
      | expression '&&' expression                            # LogicalAndExpression
      | expression '||' expression                            # LogicalOrExpression
      | expression '?' expression ':' expression              # TernaryExpression
      | expression '=' expression                             # AssignmentExpression
      | expression assignmentOperator expression              # AssignmentOperatorExpression
      | This                                                  # ThisExpression
      | Identifier                                            # IdentifierExpression
      | Super                                                 # SuperExpression
      | typeConverter expression                              # TypeConvertExpression
      | literal                                               # LiteralExpression
      | arrayLiteral                                          # ArrayLiteralExpression
      | objectLiteral                                         # ObjectLiteralExpression
      | '(' expressionSequence ')'                            # ParenthesizedExpression
      | expression If expressionSequence                      # TJSIfExpression       // b = c = 1 if a ==> (b=c=1)if a
      ;
  
  assignmentOperator
  