Work on literals and numbers.

This commit is contained in:
Jesse Brault 2025-09-07 19:06:13 -05:00
parent 6652b9fc63
commit 5c01589ca3
2 changed files with 121 additions and 9 deletions

View File

@ -607,3 +607,112 @@ ClosureParameter:
- identifier - identifier
- type_use: - type_use:
optional: true optional: true
# Literals
Literal:
rules:
- NumberLiteral
- StringLiteral
- BooleanLiteral
NumberLiteral:
rules:
- DoubleLiteral
- LongLiteral
- IntLiteral
IntLiteral:
children:
- number_base
LongLiteral:
children:
- number_base
DoubleLiteral:
children:
- double_whole
- double_fractional
DoubleWhole:
children:
- decimal_base
DoubleFractional:
children:
- decimal_base
NumberBase:
rules:
- BinaryBase
- HexadecimalBase
- DecimalBase
DecimalBase:
children:
- literal:
build:
type: string
from: whole_pair
BinaryBase:
children:
- binary_digits
BinaryDigits:
children:
- literal:
build:
type: string
from: whole_pair
HexadecimalBase:
children:
- hexadecimal_digits
HexadecimalDigits:
children:
- literal:
build:
type: string
from: whole_pair
StringLiteral:
rules:
- SingleQuoteString
- DoubleQuoteString
- BacktickString
SingleQuoteString:
children:
- string_inner:
optional: true
DoubleQuoteString:
children:
- inners:
rule: DStringInner
vec: true
- expressions:
rule: DStringExpression
vec: true
StringInner:
children:
- literal:
build:
type: string
from: whole_pair
DStringInner:
children:
- literal:
build:
type: string
from: whole_pair
DStringExpression:
children:
- expression
BacktickString:
children:
- inners:
rule: BacktickInner
vec: true
- expressions:
rule: DStringExpression
vec: true
BacktickInner:
children:
- literal:
build:
type: string
from: whole_pair
BooleanLiteral:
children:
- literal:
build:
type: boolean
from: parse_whole_pair

View File

@ -823,7 +823,11 @@ IntLiteral = { NumberBase }
LongLiteral = ${ NumberBase ~ "L" } LongLiteral = ${ NumberBase ~ "L" }
DoubleLiteral = ${ DecimalBase ~ "." ~ Digit+ } DoubleLiteral = ${ DoubleWhole ~ "." ~ DoubleFractional }
DoubleWhole = { DecimalBase }
DoubleFractional = { DecimalBase }
NumberBase = { NumberBase = {
BinaryBase BinaryBase
@ -831,18 +835,17 @@ NumberBase = {
| DecimalBase | DecimalBase
} }
DecimalBase = @{ DecimalBase = @{ '0'..'9'+ }
"0"
| DecimalStartDigit ~ Digit*
}
BinaryBase = @{ "0b" ~ Digit+ } BinaryBase = { "0b" ~ BinaryDigits }
DecimalStartDigit = { '1'..'9' } BinaryDigits = @{ BinaryDigit+ }
Digit = @{ '0'..'9'+ } BinaryDigit = { "0" | "1" }
HexadecimalBase = @{ "0x" ~ HexadecimalDigit+ } HexadecimalBase = { "0x" ~ HexadecimalDigits }
HexadecimalDigits = @{ HexadecimalDigit+ }
HexadecimalDigit = { '0'..'9' | 'a'..'f' } HexadecimalDigit = { '0'..'9' | 'a'..'f' }