X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fgrammar.git;a=blobdiff_plain;f=grammar.h;h=fd310842d27a615c47b69a3c3faeafa8fed66547;hp=ee324921dd50b0897cff43a7bbd1d1d3c1502c1f;hb=HEAD;hpb=2da4a1b6506f7eb6949b504ac1f93c393f4f7302 diff --git a/grammar.h b/grammar.h index ee32492..fd31084 100644 --- a/grammar.h +++ b/grammar.h @@ -1,46 +1,61 @@ +/* + * Copyright (C) 2005 Thadeu Lima de Souza Cascardo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + + + #ifndef GRAMMAR_H #define GRAMMAR_H #include -#include - -#define GRAMMAR_TYPE (grammar_get_type ()) -#define GRAMMAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - GRAMMAR_TYPE, Grammar)) -#define GRAMMAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ - GRAMMAR_TYPE, GrammarClass)) -#define IS_GRAMMAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - GRAMMAR_TYPE)) -#define IS_GRAMMAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - GRAMMAR_TYPE)) -#define GRAMMAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - GRAMMAR_TYPE, GrammarClass)) - typedef gint (*nextcb) (gpointer, gpointer*); typedef struct { gboolean terminal; - gint value; + GQuark value; } symbol_t; typedef struct _rule rule_t; typedef struct { - GObject parent; GHashTable* grammar; -} Grammar; -typedef struct -{ - GObjectClass parent; -} GrammarClass; - -GType grammar_get_type (); - -symbol_t* symbol_new (gboolean, gint); - -rule_t* grammar_rule_new (Grammar*, symbol_t*); -void grammar_rule_append (rule_t*, symbol_t*); +} grammar_t; + +symbol_t* symbol_new (gboolean, GQuark); +symbol_t* symbol_copy (symbol_t*); +guint symbol_hash (gconstpointer); +gboolean symbol_equal (gconstpointer, gconstpointer); +gint symbol_cmp (symbol_t*, symbol_t*); + +rule_t* rule_new (); +rule_t* rule_copy (rule_t*); +gint rule_cmp (rule_t*, rule_t*); +gboolean rule_equal (gconstpointer, gconstpointer); +guint rule_hash (gconstpointer); +symbol_t* rule_pop (rule_t*); +void rule_append (rule_t*, symbol_t*); +void rule_delete (rule_t*); + +grammar_t* grammar_new (); +rule_t* grammar_rule_new (grammar_t*, symbol_t*); +GList* grammar_get_rules (grammar_t*, symbol_t*); +GList* grammar_get_rule (rule_t*); +void grammar_delete (grammar_t*); #endif