;;;; ;;;; genturfahi - lo la .ckim. ke pe'a jajgau ratcu ke'e genturfa'i ;;;; `-> A Scheme packrat parser. ;;;; ;;;; Copyright (c) 2010 ".alyn.post." ;;;; ;;;; Permission to use, copy, modify, and/or distribute this software for any ;;;; purpose with or without fee is hereby granted, provided that the above ;;;; copyright notice and this permission notice appear in all copies. ;;;; ;;;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ;;;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ;;;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ;;;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ;;;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ;;;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ;;;; ;;; ;;; right-recursion: ;;; ;;; empty-string <- "" ;;; expr <- expr #\+ term ;;; / term ;;; term <- [[:digit:]]+ ;;; (define (test-rrecursion-+ #!key x y) (+ x y)) (define (test-rrecursion-term #!key x) (string->number x)) (define (right-recursion) (let* ((samselpla (call-with-input-file "rrecursion.peg" genturfahi-peg)) (genturfahi-right-recursion (genturfahi* (eval samselpla)))) (right-recursion-test genturfahi-right-recursion))) (define (right-recursion-test genturfahi-rrecursion) (test '(#f "") (genturfahi-rrecursion "")) (test '(#f "a") (genturfahi-rrecursion "a")) (test '(#f "abc") (genturfahi-rrecursion "abc")) (test '(#f "a+") (genturfahi-rrecursion "a+")) (test '(#f "a+b+c") (genturfahi-rrecursion "a+b+c")) (test '(1 "") (genturfahi-rrecursion "1")) (test '(1 "+") (genturfahi-rrecursion "1+")) (test '(3 "") (genturfahi-rrecursion "1+2")) (test '(3 "+") (genturfahi-rrecursion "1+2+")) (test '(6 "") (genturfahi-rrecursion "1+2+3")) 0) (test-group "right recursion" (right-recursion))