diff --git a/collects/parser-tools/lex.ss b/collects/parser-tools/lex.ss index 7e08685..34158c2 100644 --- a/collects/parser-tools/lex.ss +++ b/collects/parser-tools/lex.ss @@ -94,8 +94,14 @@ "Form should be (define-lex-abbrevs (name re) ...)" stx)))) + (require (lib "cffi.ss" "compiler")) + (define get-next-state ;;(lambda (input-char state eof-table trans-table) + (c-lambda (scheme-object int scheme-object scheme-object) int + "if (SCHEME_EOFP(___arg1)) + return (SCHEME_VEC_ELS(___arg3))[___arg2]; + else + return (SCHEME_VEC_ELS(___arg4))[SCHEME_CHAR_VAL(___arg1) | ___arg2 << 8]; ")) - (define (lexer-body start-state trans-table eof-table actions no-lookahead wrap?) (lambda (lb) (unless (lex-buffer? lb) @@ -121,13 +127,13 @@ (longest-match-length 1)) (let ((next-state (cond - ((eof-object? char) - (vector-ref eof-table state)) - (else - (vector-ref - trans-table - (bitwise-ior (char->integer char) - (arithmetic-shift state 8))))))) + ((eof-object? char) + (vector-ref eof-table state)) + (else + (vector-ref + trans-table + (bitwise-ior (char->integer char) + (arithmetic-shift state 8))))))) (cond ((not next-state) (do-match lb first-pos longest-match-length longest-match-action wrap?))