Skip to content

Latest commit

 

History

History
91 lines (73 loc) · 1.33 KB

identifiers.md

File metadata and controls

91 lines (73 loc) · 1.33 KB

Identifiers

Syntax

IdentifierLow
    :   IDENTIFIERLOW_NON_DIGIT
        (   IDENTIFIER_NON_DIGIT
        |   DIGIT
        )*
    ;

IdentifierUp
    :   IDENTIFIERUP_NON_DIGIT
        (   IDENTIFIER_NON_DIGIT
        |   DIGIT
        )*
    ;

fragment
IDENTIFIERLOW_NON_DIGIT
    :   NON_DIGIT_LOW
    |   UNIVERSAL_CHARACTER_NAME
    ;
fragment
IDENTIFIERUP_NON_DIGIT
    :   NON_DIGITUP
    |   UNIVERSAL_CHARACTER_NAME
    ;

IDENTIFIER_NON_DIGIT
    :   NON_DIGIT
    |   UNIVERSAL_CHARACTER_NAME
    ;

fragment
NON_DIGIT
    :   [a-zA-Z_]
    ;

fragment
NON_DIGIT_LOW
    :   [a-z_]
    ;

fragment
NON_DIGITUP
    :   [A-Z]
    ;

fragment
UNIVERSAL_CHARACTER_NAME
    :   '\\u' HEX_QUAD
    |   '\\U' HEX_QUAD
    |   '\\U' HEX_QUAD HEX_QUAD
    |   '\\U' HEX_QUAD HEX_QUAD HEX_QUAD
    |   '\\U' HEX_QUAD HEX_QUAD HEX_QUAD HEX_QUAD
    ;

fragment
HEX_QUAD
    :   HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
    ;
identifier: IdentifierLow | IdentifierUp ;

identifierUp: IdentifierUp ;

dollarIdentifier
  : '$' identifier
  ;

dollarIdentifierList
  : dollarIdentifier (',' dollarIdentifier)*
  ;

Semantics

There are three identifiers.

  • All upercased, used for metaprogramming
  • Dollar started, used for templates/generics
  • The rest, Don't start with a number, dollar or uppercase.