librdesc
Loading...
Searching...
No Matches
rdesc.h
Go to the documentation of this file.
1
6#ifndef RDESC_H
7#define RDESC_H
8
9#include <stdint.h>
10
12#define RDESC_VERSION_MAJOR 0
14#define RDESC_VERSION_MINOR 1
16#define RDESC_VERSION_PATCH 0
18#define RDESC_VERSION_PRE_RELEASE ""
19
20
26};
27
29struct rdesc {
31 const struct rdesc_cfg *cfg;
32
37
38 struct rdesc_node *root ;
39 struct rdesc_node *cur ;
40};
41
44 uint32_t _pad : 1;
45 uint32_t id : 31 ;
46
47 void *seminfo ;
48};
49
52 uint32_t _pad : 1;
53 uint32_t id : 31;
54
55 uint16_t child_count ;
62 uint16_t variant;
63
65};
66
68struct rdesc_node {
69 union {
71 uint32_t ty : 1;
72
73 struct rdesc_token tk ;
75 } n ;
76
78};
79
80
82typedef void (*rdesc_tk_destroyer_func)(struct rdesc_token *);
83
84
85#ifdef __cplusplus
86extern "C" {
87#endif
88
90void rdesc_init(struct rdesc *p,
91 const struct rdesc_cfg *cfg);
92
100void rdesc_destroy(struct rdesc *p);
101
103void rdesc_start(struct rdesc *p, int start_symbol);
104
111void rdesc_reset(struct rdesc *p, rdesc_tk_destroyer_func free_tk);
112
131enum rdesc_result rdesc_pump(struct rdesc *p,
132 struct rdesc_node **out,
133 struct rdesc_token *incoming_tk);
134
141void rdesc_node_destroy(struct rdesc_node *n,
143
144#ifdef __cplusplus
145}
146#endif
147
148
149#endif
void rdesc_reset(struct rdesc *p, rdesc_tk_destroyer_func free_tk)
Resets parser and its state.
Definition: rdesc.c:78
void rdesc_init(struct rdesc *p, const struct rdesc_cfg *cfg)
Initializes a new parser.
Definition: rdesc.c:47
enum rdesc_result rdesc_pump(struct rdesc *p, struct rdesc_node **out, struct rdesc_token *incoming_tk)
Drives the parsing process, The Pump.
Definition: rdesc.c:107
void rdesc_node_destroy(struct rdesc_node *n, rdesc_tk_destroyer_func free_tk)
Recursively destroys the node and its children.
Definition: rdesc.c:64
void rdesc_start(struct rdesc *p, int start_symbol)
Sets start symbol for the next match.
Definition: rdesc.c:57
void(* rdesc_tk_destroyer_func)(struct rdesc_token *)
Function pointer type for freeing tokens.
Definition: rdesc.h:82
rdesc_result
parsing status
Definition: rdesc.h:22
@ RDESC_READY
Definition: rdesc.h:23
@ RDESC_NOMATCH
Definition: rdesc.h:25
@ RDESC_CONTINUE
Definition: rdesc.h:24
void rdesc_destroy(struct rdesc *p)
Frees memory allocated by the parser and destroys the parser instance.
Definition: rdesc.c:97
Context-free grammar definition.
Definition: cfg.h:18
A node in the CST.
Definition: rdesc.h:68
struct rdesc_node * parent
Definition: rdesc.h:77
union rdesc_node::@0 n
uint32_t ty
Definition: rdesc.h:71
struct rdesc_nonterminal nt
Definition: rdesc.h:74
struct rdesc_token tk
Definition: rdesc.h:73
nonterminal (syntatic variable) object for context-free grammar
Definition: rdesc.h:51
uint32_t _pad
Definition: rdesc.h:52
struct rdesc_node ** children
Definition: rdesc.h:64
uint16_t variant
The production rule variant being parsed.
Definition: rdesc.h:62
uint16_t child_count
Definition: rdesc.h:55
Default implementation of the token backtracking stack.
Definition: stack.c:31
terminal (token) object for context-free grammar
Definition: rdesc.h:43
void * seminfo
Definition: rdesc.h:47
uint32_t _pad
Definition: rdesc.h:44
Right-recursive descent parser.
Definition: rdesc.h:29
struct rdesc_node * cur
Definition: rdesc.h:39
struct rdesc_node * root
Definition: rdesc.h:38
const struct rdesc_cfg * cfg
Definition: rdesc.h:31
struct rdesc_stack * stack
Definition: rdesc.h:36