2018-03-20 09:13:18 +01:00
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
; Type ;
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
|
|
|
Type
|
|
|
|
= Atomic [Union / Intersection]
|
|
|
|
/ Nullable
|
|
|
|
|
|
|
|
Union
|
|
|
|
= 1*(TokenUnion Atomic)
|
|
|
|
|
|
|
|
Intersection
|
|
|
|
= 1*(TokenIntersection Atomic)
|
|
|
|
|
|
|
|
Nullable
|
|
|
|
= TokenNullable TokenIdentifier [Generic]
|
|
|
|
|
|
|
|
Atomic
|
|
|
|
= TokenIdentifier [Generic / Array]
|
|
|
|
/ TokenThisVariable
|
|
|
|
/ TokenParenthesesOpen Type TokenParenthesesClose [Array]
|
|
|
|
|
|
|
|
Generic
|
|
|
|
= TokenAngleBracketOpen Type *(TokenComma Type) TokenAngleBracketClose
|
|
|
|
|
|
|
|
Array
|
|
|
|
= 1*(TokenSquareBracketOpen TokenSquareBracketClose)
|
|
|
|
|
|
|
|
|
2018-03-20 11:27:41 +01:00
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
; ConstantExpr ;
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
|
|
|
ConstantExpr
|
|
|
|
= ConstantFloat *ByteHorizontalWs
|
|
|
|
/ ConstantInt *ByteHorizontalWs
|
|
|
|
/ ConstantTrue *ByteHorizontalWs
|
|
|
|
/ ConstantFalse *ByteHorizontalWs
|
|
|
|
/ ConstantNull *ByteHorizontalWs
|
|
|
|
/ ConstantString *ByteHorizontalWs
|
|
|
|
/ ConstantArray *ByteHorizontalWs
|
|
|
|
/ ConstantFetch *ByteHorizontalWs
|
|
|
|
|
|
|
|
ConstantFloat
|
|
|
|
= ["-"] 1*ByteDecDigit "." *ByteDecDigit [ConstantFloatExp]
|
|
|
|
/ ["-"] 1*ByteDecDigit ConstantFloatExp
|
|
|
|
/ ["-"] "." 1*ByteDecDigit [ConstantFloatExp]
|
|
|
|
|
|
|
|
ConstantFloatExp
|
|
|
|
= "e" ["-"] 1*ByteDecDigit
|
|
|
|
|
|
|
|
ConstantInt
|
|
|
|
= ["-"] "0b" 1*ByteBinDigit
|
|
|
|
/ ["-"] "0o" 1*ByteOctDigit
|
|
|
|
/ ["-"] "0x" 1*ByteHexDigit
|
|
|
|
/ ["-"] 1*ByteDecDigit
|
|
|
|
|
|
|
|
ConstantTrue
|
|
|
|
= "true"
|
|
|
|
|
|
|
|
ConstantFalse
|
|
|
|
= "false"
|
|
|
|
|
|
|
|
ConstantNull
|
|
|
|
= "null"
|
|
|
|
|
|
|
|
ConstantString
|
|
|
|
= ByteSingleQuote *(ByteBackslash ByteNotEol / ByteNotEolAndNotBackslashAndNotSingleQuote) ByteSingleQuote
|
|
|
|
/ ByteDoubleQuote *(ByteBackslash ByteNotEol / ByteNotEolAndNotBackslashAndNotDoubleQuote) ByteDoubleQuote
|
|
|
|
|
|
|
|
ConstantArray
|
|
|
|
= TokenSquareBracketOpen [ConstantArrayItems] TokenSquareBracketClose
|
|
|
|
/ "array" TokenParenthesesOpen [ConstantArrayItems] TokenParenthesesClose
|
|
|
|
|
|
|
|
ConstantArrayItems
|
|
|
|
= ConstantArrayItem *(TokenComma ConstantArrayItem) [TokenComma]
|
|
|
|
|
|
|
|
ConstantArrayItem
|
|
|
|
= ConstantExpr [TokenDoubleArrow ConstantExpr]
|
|
|
|
|
|
|
|
ConstantFetch
|
|
|
|
= TokenIdentifier [TokenDoubleColon ByteIdentifierFirst *ByteIdentifierSecond *ByteHorizontalWs]
|
|
|
|
|
|
|
|
|
2018-03-20 09:13:18 +01:00
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
; Tokens ;
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
|
|
|
TokenUnion
|
|
|
|
= "|" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenIntersection
|
|
|
|
= "&" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenNullable
|
|
|
|
= "?" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenParenthesesOpen
|
|
|
|
= "(" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenParenthesesClose
|
|
|
|
= ")" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenAngleBracketOpen
|
|
|
|
= "<" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenAngleBracketClose
|
|
|
|
= ">" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenSquareBracketOpen
|
|
|
|
= "[" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenSquareBracketClose
|
|
|
|
= "]" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenComma
|
|
|
|
= "," *ByteHorizontalWs
|
|
|
|
|
2018-03-20 11:27:41 +01:00
|
|
|
TokenDoubleArrow
|
|
|
|
= "=>" *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenDoubleColon
|
|
|
|
= "::" *ByteHorizontalWs
|
|
|
|
|
2018-03-20 09:13:18 +01:00
|
|
|
TokenThisVariable
|
|
|
|
= %x24.74.68.69.73 *ByteHorizontalWs
|
|
|
|
|
|
|
|
TokenIdentifier
|
|
|
|
= [ByteBackslash] ByteIdentifierFirst *ByteIdentifierSecond *(ByteBackslash ByteIdentifierFirst *ByteIdentifierSecond) *ByteHorizontalWs
|
|
|
|
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
; Bytes ;
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
|
|
|
ByteHorizontalWs
|
|
|
|
= %x09 ; horizontal tab
|
|
|
|
/ %x20 ; space
|
|
|
|
|
2018-03-20 11:27:41 +01:00
|
|
|
ByteBinDigit
|
|
|
|
= %x30-31 ; 0-1
|
|
|
|
|
|
|
|
ByteOctDigit
|
|
|
|
= %x30-37 ; 0-7
|
|
|
|
|
|
|
|
ByteDecDigit
|
|
|
|
= %x30-39 ; 0-9
|
|
|
|
|
|
|
|
ByteHexDigit
|
|
|
|
= %x30-39 ; 0-9
|
|
|
|
/ %x41-46 ; A-F
|
|
|
|
/ %x61-66 ; a-f
|
2018-03-20 09:13:18 +01:00
|
|
|
|
|
|
|
ByteIdentifierFirst
|
|
|
|
= %x41-5A ; A-Z
|
|
|
|
/ %x5F ; _
|
|
|
|
/ %x61-7A ; a-z
|
|
|
|
/ %x80-FF
|
|
|
|
|
|
|
|
ByteIdentifierSecond
|
|
|
|
= %x30-39 ; 0-9
|
|
|
|
/ %x41-5A ; A-Z
|
|
|
|
/ %x5F ; _
|
|
|
|
/ %x61-7A ; a-z
|
|
|
|
/ %x80-FF
|
|
|
|
|
2018-03-20 11:27:41 +01:00
|
|
|
ByteSingleQuote
|
|
|
|
= %x27 ; '
|
|
|
|
|
|
|
|
ByteDoubleQuote
|
|
|
|
= %x22 ; "
|
2018-03-20 09:13:18 +01:00
|
|
|
|
|
|
|
ByteBackslash
|
|
|
|
= %x5C ; \
|
2018-03-20 11:27:41 +01:00
|
|
|
|
|
|
|
ByteNotEol
|
|
|
|
= %x00-09 ; skip LF
|
|
|
|
/ %x0B-0C ; skip CR
|
|
|
|
/ %x0E-FF
|
|
|
|
|
|
|
|
ByteNotEolAndNotBackslashAndNotSingleQuote
|
|
|
|
= %x00-09 ; skip LF
|
|
|
|
/ %x0B-0C ; skip CR
|
|
|
|
/ %x0E-26 ; skip single quote
|
|
|
|
/ %x28-5B ; skip backslash
|
|
|
|
/ %x5D-FF
|
|
|
|
|
|
|
|
ByteNotEolAndNotBackslashAndNotDoubleQuote
|
|
|
|
= %x00-09 ; skip LF
|
|
|
|
/ %x0B-0C ; skip CR
|
|
|
|
/ %x0E-21 ; skip double quote
|
|
|
|
/ %x23-5B ; skip backslash
|
|
|
|
/ %x5D-FF
|