#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 件のコメント:
コメントを投稿