diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-10-09 12:08:51 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-10-09 12:08:51 +0000 |
| commit | 8cf03bc5b6895568eb08be1415985a64793bb81c (patch) | |
| tree | 814e95e1b0422362066fef389e8b03741e8478ad /src/runtime/c/pgf/lexer.c | |
| parent | 20e4970ec19949da10b86facd3c6a5a4abb03acb (diff) | |
a major redesign in the C runtime. The parser and the linearizer now fully support BIND. The following things are still broken: parseval, word completion, handling 'pre', the robust mode
Diffstat (limited to 'src/runtime/c/pgf/lexer.c')
| -rw-r--r-- | src/runtime/c/pgf/lexer.c | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/runtime/c/pgf/lexer.c b/src/runtime/c/pgf/lexer.c deleted file mode 100644 index dda0bf6e0..000000000 --- a/src/runtime/c/pgf/lexer.c +++ /dev/null @@ -1,128 +0,0 @@ -#include <gu/utf8.h> -#include <pgf/pgf.h> -#include <pgf/data.h> -#include <wctype.h> - -typedef struct { - PgfLexer base; - GuIn* in; - GuPool* pool; - GuUCS ucs; -} PgfSimpleLexer; - -static void -pgf_lexer_read_ucs(PgfSimpleLexer *lexer, GuExn* err) -{ - lexer->ucs = gu_in_utf8(lexer->in, err); - if (gu_exn_is_raised(err)) { - gu_exn_clear(err); - lexer->ucs = ' '; - } -} - -static PgfToken -pgf_simple_lexer_read_token(PgfLexer *base, GuExn* err) -{ - PgfSimpleLexer* lexer = (PgfSimpleLexer*) base; - GuPool* tmp_pool = gu_new_pool(); - - GuStringBuf* buf = gu_string_buf(tmp_pool); - GuOut* out = gu_string_buf_out(buf); - - while (iswspace(lexer->ucs)) { - lexer->ucs = gu_in_utf8(lexer->in, err); - if (gu_exn_is_raised(err)) - goto stop; - } - - if (iswalpha(lexer->ucs) || - lexer->ucs == '\'' || - lexer->ucs == '_') { - int counter = 0; - do { - gu_out_utf8(lexer->ucs, out, err); - if (gu_exn_is_raised(err)) - goto stop; - counter++; - pgf_lexer_read_ucs(lexer, err); - - if (lexer->ucs == '.' && counter < 4) { - // perhaps an abreviation - gu_out_utf8(lexer->ucs, out, err); - if (gu_exn_is_raised(err)) - goto stop; - counter = 0; - pgf_lexer_read_ucs(lexer, err); - } - } while (iswalnum(lexer->ucs) || - lexer->ucs == '\'' || - lexer->ucs == '_'); - } else if (iswdigit(lexer->ucs) || lexer->ucs == '-') { - if (lexer->ucs == '-') { - gu_out_utf8(lexer->ucs, out, err); - if (gu_exn_is_raised(err)) - goto stop; - - pgf_lexer_read_ucs(lexer, err); - if (!iswdigit(lexer->ucs)) - goto stop; - } - - do { - gu_out_utf8(lexer->ucs, out, err); - if (gu_exn_is_raised(err)) - goto stop; - - pgf_lexer_read_ucs(lexer, err); - } while (iswdigit(lexer->ucs)); - - if (lexer->ucs == '.') { - gu_out_utf8(lexer->ucs, out, err); - if (gu_exn_is_raised(err)) - goto stop; - - pgf_lexer_read_ucs(lexer, err); - while (iswdigit(lexer->ucs)) { - gu_out_utf8(lexer->ucs, out, err); - if (gu_exn_is_raised(err)) - goto stop; - pgf_lexer_read_ucs(lexer, err); - } - } - } else { - gu_out_utf8(lexer->ucs, out, err); - if (gu_exn_is_raised(err)) - goto stop; - pgf_lexer_read_ucs(lexer, err); - } - -stop: - lexer->base.tok = gu_string_buf_freeze(buf, lexer->pool); - - gu_pool_free(tmp_pool); - return lexer->base.tok; -} - -PgfLexer* -pgf_new_simple_lexer(GuIn *in, GuPool *pool) -{ - PgfSimpleLexer* lexer = gu_new(PgfSimpleLexer, pool); - lexer->base.read_token = pgf_simple_lexer_read_token; - lexer->base.tok = ""; - lexer->in = in; - lexer->pool = pool; - lexer->ucs = ' '; - return ((PgfLexer*) lexer); -} - -PgfToken -pgf_lexer_read_token(PgfLexer *lexer, GuExn* err) -{ - return lexer->read_token(lexer, err); -} - -PgfToken -pgf_lexer_current_token(PgfLexer *lexer) -{ - return lexer->tok; -} |
