-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlexer.bak
More file actions
68 lines (59 loc) · 1.96 KB
/
lexer.bak
File metadata and controls
68 lines (59 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#lang racket
(require parser-tools/lex
(prefix-in : parser-tools/lex-sre)
parser-tools/yacc)
(require parser-tools/lex
(prefix-in : parser-tools/lex-sre)
parser-tools/yacc)
(define simple-math-lexer
(lexer
("if" (token-if))
("while" (token-while))
("do" (token-do))
("end" (token-end))
("then" (token-then))
("else" (token-else))
("endif" (token-endif))
("return" (token-returnt))
("null" (token-null))
("true" (token-true))
("false" (token-false))
("string" (token-string (lexeme)))
((:or (:+ (char-range #\0 #\9)) (:: (:+ (char-range #\0 #\9)) #\. (:+ (char-range #\0 #\9)))) (token-posnumber (string->number lexeme)))
((:+ (char-range #\a #\z)) (token-var (string->symbol lexeme)))
("+" (token-pos))
("==" (token-eq))
("=" (token-eq-assign))
("-" (token-neg))
("*" (token-mult))
("/" (token-div))
("<" (token-less))
(">" (token-more))
("!=" (token-neq))
("(" (token-lpar))
(")" (token-rpar))
("[" (token-lbrack))
("]" (token-rbrack))
(";" (token-semicolon))
("," (token-camma))
(whitespace (simple-math-lexer input-port))
((eof) (token-EOF))))
(define-tokens a (var string posnumber))
(define-empty-tokens b (EOF pos neg eq-assign eq mult div less more neq lpar rpar lbrack rbrack if semicolon camma while do end then else endif returnt null true false))
;test
(define lex-this (lambda (lexer input) (lambda () (lexer input))))
(define my-lexer (lex-this simple-math-lexer (open-input-string "a=3")))
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)
(my-lexer)