; c.l -*- Scheme -*- letter [a-zA-Z] digit [0-9] digit16 [0-9a-fA-F] digit8 [0-7] space [ ] %% \\[ ] (yycontinue) \\?\13?\n (if pp-mode (begin (set! pp-mode #f) (tok 'pp-end)) (yycontinue) ) {space}+ (yycontinue) \9+ (yycontinue) \13+ (yycontinue) \12+ (yycontinue) "//" (let loop () (let ([c (yygetc)]) (if (or (eq? 'eof c) (char=? #\newline c)) (begin (if pp-mode (begin (set! pp-mode #f) (tok 'pp-end)) (yycontinue) ) ) (loop) ) ) ) "/*" (let loop ([c (yygetc)]) (cond [(eq? 'eof c) (parsing-error "unexpected end of comment")] [(char=? #\newline c) (loop (yygetc))] [(char=? c #\*) (let ([c2 (yygetc)]) (if (eq? #\/ c2) (yycontinue) (loop c2) ) ) ] [else (loop (yygetc))] ) ) "enum" (tok 'enum) "typedef" (tok 'typedef) "extern" (tok 'extern) "static" (tok 'static) "___fixnum" (tok 'fixnum) "___number" (tok 'number) "___symbol" (tok 'symbol) "___bool" (tok 'bool) "___pointer_vector" (tok 'pointer-vector) "___pointer" (tok 'pointer) "___u32" (tok 'u32) "___s32" (tok 's32) "___u64" (tok 'u64) "___s64" (tok 's64) "int64_t" (tok 's64) "__int64" (tok 's64) "int32_t" (tok 's32) "__int32" (tok 's32) "uint64_t" (tok 'u64) "uint32_t" (tok 'u32) "bool" (tok 'bool) "___safe" (tok 'callback) "___scheme_value" (tok 'scheme-value) "___scheme_pointer" (tok 'scheme-pointer) "___byte_vector" (tok 'byte-vector) ; DEPRECATED "___blob" (tok 'blob) "C_word" (tok 'scheme-value) "___abstract" (tok 'abstract) "___specialize" (tok 'specialize) "___byte" (tok 'byte) "___discard" (tok 'discard) "___in" (tok 'in) "___out" (tok 'out) "___inout" (tok 'inout) "___mutable" (tok 'mutable) "___length" (tok 'length) "size_t" (tok 'size_t) "int" (tok 'int) "unsigned" (tok 'unsigned) "signed" (tok 'signed) "float" (tok 'float) "double" (tok 'double) "short" (tok 'short) "long" (tok 'long) "char" (tok 'char) "void" (tok 'void) "struct" (tok 'struct) "union" (tok 'union) "const" (tok 'const) "class" (tok 'class) "public" (tok 'public) "protected" (tok 'protected) "private" (tok 'private) "volatile" (tok 'volatile) "namespace" (tok 'namespace) "virtual" (tok 'virtual) "explicit" (tok 'explicit) "inline" (tok 'inline) "using" (tok 'using) "@interface" (tok 'interface) "@implementation" (tok 'implementation) "@end" (tok 'end) "@class" (tok 'objc-class) "@protocol" (tok 'protocol) "@public" (tok 'objc-public) "@protected" (tok 'objc-protected) "@private" (tok 'objc-private) "@encode" (tok (list 'id "@encode")) "@defs" (tok (list 'id "@defs")) "@selector" (tok (list 'id "@selector")) "..." (tok 'dots) ^[ \t]*#[ ]*define (begin (set! pp-mode #t) (tok 'pp-define)) ^[ \t]*#[ ]*include (begin (set! pp-mode 'include) (tok 'pp-include)) ^[ \t]*#[ ]*import (begin (set! pp-mode 'import) (tok 'pp-import)) ^[ \t]*#[ ]*ifdef (begin (set! pp-mode #t) (tok 'pp-ifdef)) ^[ \t]*#[ ]*ifndef (begin (set! pp-mode #t) (tok 'pp-ifndef)) ^[ \t]*#[ ]*elif (begin (set! pp-mode #t) (tok 'pp-elif)) ^[ \t]*#[ ]*if (begin (set! pp-mode #t) (tok 'pp-if)) ^[ \t]*#[ ]*else (begin (set! pp-mode #t) (tok 'pp-else)) ^[ \t]*#[ ]*pragma (begin (set! pp-mode #t) (tok 'pp-pragma)) ^[ \t]*#[ ]*endif (begin (set! pp-mode #t) (tok 'pp-endif)) ^[ \t]*#[ ]*error (begin (set! pp-mode #t) (tok 'pp-error)) ^[ \t]*#[ ]*undef (begin (set! pp-mode #t) (tok 'pp-undef)) # (tok '(op "#")) "if" (tok 'if) "else" (tok 'else) @?\" (let loop ([cs '()]) (let ([c (yygetc)]) (cond [(eq? 'eof c) (parsing-error "unexpected end of string constant")] [(char=? c #\\) (loop (cons (yygetc) cs))] [(char=? c #\") (tok (list 'string (reverse-list->string cs)) )] [else (loop (cons c cs))] ) ) ) \'\\{digit}{digit}{digit}\' (tok (list 'char (string->number (substring yytext 2 5) 8))) \'\\x{digit16}+\' (tok (list 'char (string->number (substring yytext 3 (- (string-length yytext) 1)) 16))) \'\\0\' (tok '(char #\nul)) \'\\a\' (tok '(char #\alarm)) \'\\b\' (tok '(char #\backspace)) \'\\f\' (tok '(char #\page)) \'\\n\' (tok '(char #\newline)) \'\\r\' (tok '(char #\return)) \'\\t\' (tok '(char #\tab)) \'\\v\' (tok '(char #\vtab)) \'\\.\' (tok (list 'char (string-ref yytext 2))) \'.\' (tok (list 'char (string-ref yytext 1))) ({letter}|_)({letter}|_|{digit})* (tok (list 'id yytext)) 0(x|X){digit16}+ (tok (list 'num (string->number (substring yytext 2 (string-length yytext)) 16))) 0{digit8}+ (tok (list 'num (string->number (substring yytext 1 (string-length yytext)) 8))) [-+]?{digit}+(\.{digit}*)?([eE][-+]?{digit}+)? (tok (list 'num (string->number yytext))) "<" (if (eq? pp-mode 'include) (let loop ([s '()]) (let ([c (yygetc)]) (cond [(eq? 'eof c) (parsing-error "unexpected end of include file name")] [(char=? #\> c) (set! pp-mode #f) (tok `(i-string ,(reverse-list->string s)) )] [else (loop (cons c s))] ) ) ) (tok `(op "<") )) "(" (tok 'open-paren) ")" (tok 'close-paren) "[" (tok 'open-bracket) "]" (tok 'close-bracket) "{" (tok 'open-curly) "}" (tok 'close-curly) "," (tok 'comma) ";" (tok 'semicolon) "*" (tok 'star) "."|"+="|"-="|">>="|"<<="|"*="|"/="|"%="|"%"|"&="|"|="|"^="|"+"|"-"|"/"|">="|"<="|"=="|"<<"|">>"|"&&"|"||"|"&"|"|"|">"|"<"|"^"|"~"|"?"|"::"|":"|"="|"!="|"!" (tok (list 'op yytext)) <> (begin (set! pp-mode #f) (tok 'stop)) <> (lexer-error (yygetc))