1
0
forked from GitHub/gf-core

a top-level API for parsing in the C runtime

This commit is contained in:
kr.angelov
2012-12-13 14:44:33 +00:00
parent 68249a11d2
commit 14e721dda9
10 changed files with 138 additions and 91 deletions

View File

@@ -1,11 +1,13 @@
#include <gu/list.h>
#include <pgf/lexer.h>
#include <pgf/pgf.h>
#include <pgf/data.h>
#include <wctype.h>
struct PgfLexer {
GuReader* rdr;
GuPool* pool;
GuUCS ucs;
PgfToken tok;
};
PgfLexer*
@@ -13,17 +15,17 @@ pgf_new_lexer(GuReader *rdr, GuPool *pool)
{
PgfLexer* lexer = gu_new(PgfLexer, pool);
lexer->rdr = rdr;
lexer->pool = pool;
lexer->ucs = ' ';
lexer->tok = gu_empty_string;
return lexer;
}
PgfToken
pgf_lexer_next_token(PgfLexer *lexer, GuExn* err, GuPool *pool)
pgf_lexer_read_token(PgfLexer *lexer, GuExn* err)
{
GuPool* tmp_pool = gu_new_pool();
PgfToken tok;
GuStringBuf* buf = gu_string_buf(tmp_pool);
GuWriter* wtr = gu_string_buf_writer(buf);
@@ -109,8 +111,14 @@ pgf_lexer_next_token(PgfLexer *lexer, GuExn* err, GuPool *pool)
}
stop:
tok = gu_string_buf_freeze(buf, pool);
lexer->tok = gu_string_buf_freeze(buf, lexer->pool);
gu_pool_free(tmp_pool);
return tok;
return lexer->tok;
}
PgfToken
pgf_lexer_current_token(PgfLexer *lexer)
{
return lexer->tok;
}