#! /bin/sh # -*-scheme-*- MES_ARENA=${MES_ARENA-50000000} export MES_ARENA prefix=module/ cat $prefix/mes/base-0.mes $0 | $(dirname $0)/mes $MES_FLAGS "$@" # | exit $? !# ;;; Mes --- Maxwell Equations of Software ;;; Copyright © 2016 Jan Nieuwenhuizen ;;; ;;; This file is part of Mes. ;;; ;;; Mes is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; Mes is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with Mes. If not, see . ;;; Commentary: ;;; nyacc-calc.mes ;;; ;;; Run with Guile: ;;; guile/nyacc-calc.scm ;;; Code: (mes-use-module (mes scm)) (mes-use-module (srfi srfi-9-psyntax)) (mes-use-module (mes optargs)) (mes-use-module (mes fluids)) (mes-use-module (mes catch)) (mes-use-module (mes guile)) (mes-use-module (mes pretty-print)) (mes-use-module (nyacc lalr)) (mes-use-module (nyacc lex)) (mes-use-module (nyacc parse)) ;; (define-module (nyacc) ;; #:use-module (nyacc lalr) ;; #:use-module (nyacc lex) ;; #:use-module (nyacc parse) ;; #:use-module (ice-9 rdelim) ;; #:use-module (ice-9 pretty-print) ;; #:export (main)) (define simple-spec (lalr-spec (prec< (left "+" "-") (left "*" "/")) (start expr) (grammar (expr (expr "+" expr ($$ (+ $1 $3))) (expr "-" expr ($$ (- $1 $3))) (expr "*" expr ($$ (* $1 $3))) (expr "/" expr ($$ (/ $1 $3))) ("*" $error) ($fixed ($$ (string->number $1))) ($float ($$ (string->number $1))) ("(" expr ")" ($$ $2)))))) (define simple-mach (make-lalr-machine simple-spec)) ;; OR ;; (use-modules (nyacc bison)) ;; (define simple-mach (make-lalr-machine/bison simple-spec)) (define match-table (assq-ref simple-mach 'mtab)) (define gen-lexer (make-lexer-generator match-table)) (define parse (make-lalr-parser simple-mach)) (define demo-string "2 + 2") (define (main arguments) (display demo-string) (display " => ") (display (with-input-from-string demo-string (lambda () (parse (gen-lexer))))) (newline)) (main #f) ()