bugfix in the lexer from the C runtime. the input sentence doesn't have to terminate with whitespace

This commit is contained in:
kr.angelov
2012-12-13 16:45:44 +00:00
parent 0f0b7158c9
commit f7a5eb0df1
2 changed files with 20 additions and 25 deletions

View File

@@ -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:

View File

@@ -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>