view 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
line wrap: on
line source

#include <glib.h>
#include "symbols.h"
#include "parser.h"
#include "keywords.h"

/* Funkcja ustawiająca źródło dla flex-a. */
extern void yyrestart(FILE *);

/* Tworzy nowy parser. */
Parser         *
newParser(const char *filename)
{
    Parser         *parser;

    parser = g_new(Parser, 1);
    parser->source = fopen(filename, "r");
    if (parser->source==NULL) {
        g_free(parser);
        return NULL;
    }
    parser->filename = g_string_new(filename);
    parser->namespaces = NULL;
    parser->scopes = NULL;
    parser->keywords = g_hash_table_new(g_str_hash, g_str_equal);
    parser->levelup = TRUE;
    parser->line = 1;
    parser->root = NULL;
    parser->codecomment = NULL;
    parser->blockcomment = NULL;
    initKeywords(parser);
    yyrestart(parser->source);  /* Każemy flexowi czytać z tego pliku. */
    return parser;
}

/* Niszczy parser. */
void
destroyParser(Parser * parser)
{
    g_string_free(parser->filename, TRUE);
    g_hash_table_destroy(parser->keywords);
    fclose(parser->source);
    g_free(parser);
    parser = NULL;
}