summaryrefslogtreecommitdiffabout
path: root/src/parser.c
Side-by-side diff
Diffstat (limited to 'src/parser.c') (more/less context) (ignore whitespace changes)
-rw-r--r--src/parser.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/parser.c b/src/parser.c
new file mode 100644
index 0000000..6f84bd8
--- a/dev/null
+++ b/src/parser.c
@@ -0,0 +1,60 @@
+/* grecs - Gray's Extensible Configuration System
+ Copyright (C) 2007-2011 Sergey Poznyakoff
+
+ Grecs 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 3 of the License, or (at your
+ option) any later version.
+
+ Grecs 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 Grecs. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include "grecs.h"
+
+int grecs_error_count;
+int grecs_default_port = 0;
+
+int grecs_trace_flags = 0;
+
+#ifndef GRECS_DEFAULT_PARSER
+# define GRECS_DEFAULT_PARSER grecs_grecs_parser
+#endif
+
+struct grecs_node *(*grecs_parser_fun)(const char *name, int trace) =
+ GRECS_DEFAULT_PARSER;
+
+void
+grecs_gram_trace(int n)
+{
+ if (n)
+ grecs_trace_flags |= GRECS_TRACE_GRAM;
+ else
+ grecs_trace_flags &= ~GRECS_TRACE_GRAM;
+}
+
+void
+grecs_lex_trace(int n)
+{
+ if (n)
+ grecs_trace_flags |= GRECS_TRACE_LEX;
+ else
+ grecs_trace_flags &= ~GRECS_TRACE_LEX;
+}
+
+struct grecs_node *
+grecs_parse(const char *name)
+{
+ grecs_error_count = 0;
+ return grecs_parser_fun(name, grecs_trace_flags);
+}

Return to:

Send suggestions and report system problems to the System administrator.