diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2012-12-13 16:45:44 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2012-12-13 16:45:44 +0000 |
| commit | f7a5eb0df10f3cfef6e3d4c70c4714008c50bbe8 (patch) | |
| tree | 4891cd757617c10175a1ca1dbcb0fb446c263efc /src/runtime | |
| parent | 0f0b7158c97cbeb561e6d292b9361536d93f5195 (diff) | |
bugfix in the lexer from the C runtime. the input sentence doesn't have to terminate with whitespace
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/c/pgf/lexer.c | 44 | ||||
| -rw-r--r-- | src/runtime/c/utils/pgf-translate.c | 1 |
2 files changed, 20 insertions, 25 deletions
diff --git a/src/runtime/c/pgf/lexer.c b/src/runtime/c/pgf/lexer.c index acb4cd0c4..15caab151 100644 --- a/src/runtime/c/pgf/lexer.c +++ b/src/runtime/c/pgf/lexer.c @@ -21,6 +21,16 @@ pgf_new_lexer(GuReader *rdr, GuPool *pool) return lexer; } +static void +pgf_lexer_read_ucs(PgfLexer *lexer, GuExn* err) +{ + lexer->ucs = gu_read_ucs(lexer->rdr, err); + if (gu_exn_is_raised(err)) { + gu_exn_clear(err); + lexer->ucs = ' '; + } +} + PgfToken pgf_lexer_read_token(PgfLexer *lexer, GuExn* err) { @@ -44,19 +54,15 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err) if (gu_exn_is_raised(err)) goto stop; counter++; - lexer->ucs = gu_read_ucs(lexer->rdr, err); - if (gu_exn_is_raised(err)) - goto stop; - + pgf_lexer_read_ucs(lexer, err); + if (lexer->ucs == '.' && counter < 4) { // perhaps an abreviation gu_ucs_write(lexer->ucs, wtr, err); if (gu_exn_is_raised(err)) goto stop; counter = 0; - lexer->ucs = gu_read_ucs(lexer->rdr, err); - if (gu_exn_is_raised(err)) - goto stop; + pgf_lexer_read_ucs(lexer, err); } } while (iswalnum(lexer->ucs) || lexer->ucs == '\'' || @@ -66,10 +72,8 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err) gu_ucs_write(lexer->ucs, wtr, err); if (gu_exn_is_raised(err)) goto stop; - lexer->ucs = gu_read_ucs(lexer->rdr, err); - if (gu_exn_is_raised(err)) - goto stop; - + + pgf_lexer_read_ucs(lexer, err); if (!iswdigit(lexer->ucs)) goto stop; } @@ -78,9 +82,8 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err) gu_ucs_write(lexer->ucs, wtr, err); if (gu_exn_is_raised(err)) goto stop; - lexer->ucs = gu_read_ucs(lexer->rdr, err); - if (gu_exn_is_raised(err)) - goto stop; + + pgf_lexer_read_ucs(lexer, err); } while (iswdigit(lexer->ucs)); if (lexer->ucs == '.') { @@ -88,26 +91,19 @@ pgf_lexer_read_token(PgfLexer *lexer, GuExn* err) if (gu_exn_is_raised(err)) goto stop; - lexer->ucs = gu_read_ucs(lexer->rdr, err); - if (gu_exn_is_raised(err)) - goto stop; - + pgf_lexer_read_ucs(lexer, err); while (iswdigit(lexer->ucs)) { gu_ucs_write(lexer->ucs, wtr, err); if (gu_exn_is_raised(err)) goto stop; - lexer->ucs = gu_read_ucs(lexer->rdr, err); - if (gu_exn_is_raised(err)) - goto stop; + pgf_lexer_read_ucs(lexer, err); } } } else { gu_ucs_write(lexer->ucs, wtr, err); if (gu_exn_is_raised(err)) goto stop; - lexer->ucs = gu_read_ucs(lexer->rdr, err); - if (gu_exn_is_raised(err)) - goto stop; + pgf_lexer_read_ucs(lexer, err); } stop: diff --git a/src/runtime/c/utils/pgf-translate.c b/src/runtime/c/utils/pgf-translate.c index 03b3635f0..0d64e41b9 100644 --- a/src/runtime/c/utils/pgf-translate.c +++ b/src/runtime/c/utils/pgf-translate.c @@ -6,7 +6,6 @@ #include <gu/file.h> #include <pgf/pgf.h> #include <pgf/parser.h> -#include <pgf/lexer.h> #include <pgf/literals.h> #include <pgf/linearize.h> #include <pgf/edsl.h> |
