From e8f555ae834cd25fd444b0e5856283dbd7333716 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Sun, 21 Aug 2005 18:36:46 +0000 Subject: [PATCH] Recursive parser have start symbol Recursive Descent Parser is initialized with a start non-terminal symbol. git-archimport-id: cascardo@tlscascardo--private/libgrammatic--dev--0.1--patch-1 --- rdp.c | 6 ++++-- rdp.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/rdp.c b/rdp.c index a6fca7c..52245af 100644 --- a/rdp.c +++ b/rdp.c @@ -1,7 +1,7 @@ #include "rdp.h" #include -rdp_t* rdp_new (nextcb cb, gpointer data) +rdp_t* rdp_new (nextcb cb, gpointer data, gint value) { rdp_t* parser; @@ -9,6 +9,7 @@ rdp_t* rdp_new (nextcb cb, gpointer data) parser = g_malloc (sizeof (rdp_t)); parser->cb = cb; parser->data = data; + parser->start = symbol_new (FALSE, value); parser->rules = NULL; @@ -21,6 +22,7 @@ rdp_t* rdp_new (nextcb cb, gpointer data) void rdp_delete (rdp_t* parser) { + g_free (parser->start); g_free (parser); } @@ -140,7 +142,7 @@ gpointer rdp_build (rdp_t* parser) gpointer attrib; - if (rdp_step (parser, NULL, &attrib)) + if (rdp_step (parser, parser->start, &attrib)) return attrib; return NULL; diff --git a/rdp.h b/rdp.h index fc700fc..2e892fb 100644 --- a/rdp.h +++ b/rdp.h @@ -15,9 +15,10 @@ typedef struct gpointer data; GList* rules; GList* buffer; + symbol_t* start; } rdp_t; -rdp_t* rdp_new (nextcb, gpointer); +rdp_t* rdp_new (nextcb, gpointer, gint); void rdp_delete (rdp_t*); gpointer rdp_build (rdp_t*); -- 2.20.1