Recursive Descent Parser no longer inherits from Grammar. It is not a
GObject any more.
git-archimport-id: cascardo@tlscascardo--private/libgrammatic--nogobject--0.1--patch-2
rule_t* rule;
scanner_t* scanner;
rule_t* rule;
scanner_t* scanner;
scanner = scanner_new (read, fd);
scanner = scanner_new (read, fd);
- parser = rdp_new (scanner_next, scanner, BNF_GRAMMAR);
- grammar = (grammar_t*) parser;
+ grammar = grammar_new ();
+ parser = rdp_new (scanner_next, scanner, BNF_GRAMMAR, grammar);
rule = grammar_rule_new (grammar, symbol_new (FALSE, BNF_GRAMMAR));
rule_append (rule, symbol_new (FALSE, BNF_RULES));
rule = grammar_rule_new (grammar, symbol_new (FALSE, BNF_GRAMMAR));
rule_append (rule, symbol_new (FALSE, BNF_RULES));
-static void rdp_init (GTypeInstance* instance, gpointer g_class)
+rdp_t* rdp_new (nextcb cb, gpointer data, gint value, grammar_t* grammar)
- Rdp* self = RDP(instance);
- self->cb = NULL;
- self->data = NULL;
- self->buffer = NULL;
- self->start = NULL;
-}
-static void rdp_finalize (GObject* obj)
-{
- RdpClass* klass;
- GObject* parent_class;
- Rdp* self;
- self = RDP(obj);
- g_free (self->start);
- klass = RDP_GET_CLASS(obj);
- parent_class = g_type_class_peek_parent (klass);
- G_OBJECT_CLASS(parent_class)->finalize (obj);
-}
-static void rdp_class_init (RdpClass* klass)
-{
- GObjectClass* gobj_class = G_OBJECT_CLASS(klass);
- gobj_class->finalize = rdp_finalize;
-}
-
-GType rdp_get_type ()
-{
- static GType type = 0;
- if (type == 0)
- {
- static const GTypeInfo info =
- {
- sizeof (RdpClass),
- NULL,
- NULL,
- (GClassInitFunc)rdp_class_init,
- NULL,
- NULL,
- sizeof (Rdp),
- 0,
- rdp_init
- };
- type = g_type_register_static (GRAMMAR_TYPE, "RdpType", &info, 0);
- }
- return type;
-}
-
-Rdp* rdp_new (nextcb cb, gpointer data, gint value)
-{
-
- Rdp* parser;
-
- parser = g_object_new (RDP_TYPE, NULL);
+ parser = g_malloc (sizeof (rdp_t));
parser->cb = cb;
parser->data = data;
parser->start = symbol_new (FALSE, value);
parser->cb = cb;
parser->data = data;
parser->start = symbol_new (FALSE, value);
+ parser->grammar = grammar;
parser->buffer = g_list_append (NULL, NULL);
parser->buffer = g_list_append (NULL, NULL);
-void rdp_delete (Rdp* parser)
+void rdp_delete (rdp_t* rdp)
-
- g_object_unref (parser);
-
-symbol_t* buffer_next (Rdp* parser, gpointer* attrib)
+symbol_t* buffer_next (rdp_t* parser, gpointer* attrib)
-gboolean rdp_step (Rdp* parser, symbol_t* symbol, gpointer* attrib)
+gboolean rdp_step (rdp_t* parser, symbol_t* symbol, gpointer* attrib)
- for (l = grammar_get_rules (parser, symbol); l != NULL; l = g_list_next (l))
+ l = grammar_get_rules (parser->grammar, symbol);
+ for (; l != NULL; l = g_list_next (l))
-gpointer rdp_build (Rdp* parser)
+gpointer rdp_build (rdp_t* parser)
-#define RDP_TYPE (rdp_get_type ())
-#define RDP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- RDP_TYPE, Rdp))
-#define RDP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
- RDP_TYPE, RdpClass))
-#define IS_RDP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- RDP_TYPE))
-#define IS_RDP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- RDP_TYPE))
-#define RDP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- RDP_TYPE, RdpClass))
-
-
typedef struct _buffer buffer_t;
typedef struct
{
typedef struct _buffer buffer_t;
typedef struct
{
nextcb cb;
gpointer data;
GList* buffer;
symbol_t* start;
nextcb cb;
gpointer data;
GList* buffer;
symbol_t* start;
-} Rdp;
-
-typedef struct
-{
- GrammarClass parent;
-} RdpClass;
-
-GType rdp_get_type ();
+ grammar_t* grammar;
+} rdp_t;
-Rdp* rdp_new (nextcb, gpointer, gint);
-void rdp_delete (Rdp*);
-gpointer rdp_build (Rdp*);
+rdp_t* rdp_new (nextcb, gpointer, gint, grammar_t*);
+void rdp_delete (rdp_t*);
+gpointer rdp_build (rdp_t*);