core/text/regex/parser
regex_parser
Types
27Error
Error :: union {
Expected_Token,
Invalid_Repetition,
Invalid_Token,
Invalid_Unicode,
Too_Many_Capture_Groups,
Unexpected_EOF,
}SourceExpected_Token
Expected_Token :: struct {
pos: int,
kind: Token_Kind,
}SourceInvalid_Repetition
Invalid_Repetition :: struct {
pos: int,
}SourceInvalid_Token
Invalid_Token :: struct {
pos: int,
kind: Token_Kind,
}SourceInvalid_Unicode
Invalid_Unicode :: struct {
pos: int,
}SourceNode
Node :: union {
^Node_Rune,
^Node_Rune_Class,
^Node_Wildcard,
^Node_Concatenation,
^Node_Alternation,
^Node_Repeat_Zero,
^Node_Repeat_Zero_Non_Greedy,
^Node_Repeat_One,
^Node_Repeat_One_Non_Greedy,
^Node_Repeat_N,
^Node_Optional,
^Node_Optional_Non_Greedy,
^Node_Group,
^Node_Anchor,
^Node_Word_Boundary,
// Optimized nodes (not created by the Parser):
^Node_Match_All_And_Escape,
}SourceNode_Alternation
Node_Alternation :: struct {
left: Node,
right: Node,
}SourceNode_Anchor
Node_Anchor :: struct {
start: bool,
}SourceNode_Concatenation
Node_Concatenation :: struct {
nodes: [dynamic]Node,
}SourceNode_Group
Node_Group :: struct {
inner: Node,
capture_id: int,
capture: bool,
}SourceNode_Match_All_And_Escape
Node_Match_All_And_Escape :: struct {}SourceNode_Optional
Node_Optional :: struct {
inner: Node,
}SourceNode_Optional_Non_Greedy
Node_Optional_Non_Greedy :: struct {
inner: Node,
}SourceNode_Repeat_N
Node_Repeat_N :: struct {
inner: Node,
lower: int,
upper: int,
}SourceNode_Repeat_One
Node_Repeat_One :: struct {
inner: Node,
}SourceNode_Repeat_One_Non_Greedy
Node_Repeat_One_Non_Greedy :: struct {
inner: Node,
}SourceNode_Repeat_Zero
Node_Repeat_Zero :: struct {
inner: Node,
}SourceNode_Repeat_Zero_Non_Greedy
Node_Repeat_Zero_Non_Greedy :: struct {
inner: Node,
}SourceNode_Rune
Node_Rune :: struct {
data: rune,
}SourceNode_Rune_Class
Node_Rune_Class :: struct {
negating: bool,
data: Rune_Class_Data,
}SourceNode_Wildcard
Node_Wildcard :: struct {}SourceNode_Word_Boundary
Node_Word_Boundary :: struct {
non_word: bool,
}SourceParser
Parser :: struct {
flags: common.Flags,
t: Tokenizer,
cur_token: Token,
groups: int,
}SourceRune_Class_Data
Rune_Class_Data :: struct {
runes: [dynamic]rune,
ranges: [dynamic]Rune_Class_Range,
}SourceRune_Class_Range
Rune_Class_Range :: struct {
lower: rune,
upper: rune,
}SourceToo_Many_Capture_Groups
Too_Many_Capture_Groups :: struct {
pos: int,
}SourceUnexpected_EOF
Unexpected_EOF :: struct {
pos: int,
}SourceConstants
3Token
Token :: tokenizer.TokenSourceToken_Kind
Token_Kind :: tokenizer.Token_KindSourceTokenizer
Tokenizer :: tokenizer.TokenizerSourceProcedures
8advance
advance :: proc(p: ^Parser) -> (Error)Sourceexpect
expect :: proc(p: ^Parser, kind: Token_Kind) -> (err: Error)Sourceleft_binding_power
left_binding_power :: proc(kind: Token_Kind) -> (int)Sourceleft_denotation
left_denotation :: proc(p: ^Parser, token: Token, left: Node) -> (result: Node, err: Error)Sourcenull_denotation
null_denotation :: proc(p: ^Parser, token: Token) -> (result: Node, err: Error)Sourceparse
parse :: proc(str: string, flags: common.Flags) -> (result: Node, err: Error)Sourceparse_expression
parse_expression :: proc(p: ^Parser, rbp: int) -> (result: Node, err: Error)Sourcewrite_node
write_node :: proc(w: io.Writer, node: Node)Source