summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/lexer.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-10-09 12:08:51 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-10-09 12:08:51 +0000
commit8cf03bc5b6895568eb08be1415985a64793bb81c (patch)
tree814e95e1b0422362066fef389e8b03741e8478ad /src/runtime/c/pgf/lexer.c
parent20e4970ec19949da10b86facd3c6a5a4abb03acb (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.c128
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;
-}