#lang racket
(require parser-tools/lex
parser-tools/lex-sre)
(define-lex-abbrev newline
(or (: #\return #\newline)
(: #\newline)
(: #\return)))
(define-lex-abbrev whitespace
(+
(or (: #\tab)
(: #\space))))
(define-lex-abbrev section
(: #\[
(* (~ #\]))
#\]))
(define-lex-abbrev =
#\=)
(define-lex-abbrev id
(+ (~ #\space #\tab #\newline #\return #\[ #\])))
(define l
(lexer
;; skip
[newline (l input-port)]
;; skip
[whitespace (l input-port)]
[section `(section . ,lexeme)]
[= `(equal . "=")]
[(eof) `(eof . null)]
[id `(id . ,lexeme)]))
(define p (open-input-string "[section]\n key = value"))
(display (l p))
;=> (section . [section])
(display (l p))
;=> (id . key)
(display (l p))
;=> (equal . =)
(display (l p))
;=> (id . value)
(display (l p))
;=> (eof . null)
2012年5月30日水曜日
[Racket]字句解析
Racketのparser-toolsを使って字句解析をしてみます。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿