annotate parser.c @ 2:ff5e493bc9cb default tip

2003-01-29
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 13 Oct 2012 21:14:50 +0200
parents 1361f218a6e5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
1 #include <glib.h>
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
2 #include "symbols.h"
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
3 #include "parser.h"
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
4 #include "keywords.h"
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
5
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
6 /* Funkcja ustawiająca źródło dla flex-a. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
7 extern void yyrestart(FILE *);
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
8
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
9 /* Tworzy nowy parser. */
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
10 Parser *
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
11 newParser(const char *filename)
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
12 {
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
13 Parser *parser;
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
14
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
15 parser = g_new(Parser, 1);
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
16 parser->source = fopen(filename, "r");
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
17 if (parser->source==NULL) {
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
18 g_free(parser);
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
19 return NULL;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
20 }
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
21 parser->filename = g_string_new(filename);
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
22 parser->namespaces = NULL;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
23 parser->scopes = NULL;
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
24 parser->keywords = g_hash_table_new(g_str_hash, g_str_equal);
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
25 parser->levelup = TRUE;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
26 parser->line = 1;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
27 parser->root = NULL;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
28 parser->codecomment = NULL;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
29 parser->blockcomment = NULL;
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
30 initKeywords(parser);
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
31 yyrestart(parser->source); /* Każemy flexowi czytać z tego pliku. */
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
32 return parser;
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
33 }
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
34
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
35 /* Niszczy parser. */
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
36 void
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
37 destroyParser(Parser * parser)
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
38 {
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
39 g_string_free(parser->filename, TRUE);
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
40 g_hash_table_destroy(parser->keywords);
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents: 1
diff changeset
41 fclose(parser->source);
1
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
42 g_free(parser);
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
43 parser = NULL;
1361f218a6e5 2002-12-02
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
44 }