[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
11.5.2 Roman numbers
The second example presents a grammar that reads Arabic and Roman number.
(let ((par-open 0)) (regular-grammar ((arabic (in ("09"))) (roman (uncase (in "ivxlcdm")))) ((+ (in #" \t\n")) (ignore)) ((+ arabic) (string->integer (the-string))) ((+ roman) (roman->arabic (the-string))) (#\( (let ((open-key par-open)) (set! par-open (+ 1 par-open)) (context 'pair) (let loop-pair ((walk (ignore))) (cond ((= open-key par-open) '()) (else (cons walk (loop-pair (ignore)))))))) (#\) (set! par-open (- par-open 1)) (if (< par-open 0) (begin (set! par-open 0) (ignore)) #f)) ((in "+-*\\") (string->symbol (the-string))) (else (let ((char (the-failure))) (if (eof-object? char) char (error "grammar-roman" "Illegal char" char))))))
This document was generated on March 31, 2014 using texi2html 5.0.