From c9c44ad63f74ce3532d89084ce1e4cbf116db241 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sun, 18 Dec 2016 15:44:09 +0100 Subject: [PATCH] Add Nyacc example scripts. * guile/nyacc-calc.scm: New file. * guile/nyacc.scm: New file. * scripts/nyacc-calc.mes: New file. * scripts/nyacc.mes: New file. * GNUmakefile (mes-check, guile-check): Run them. --- GNUmakefile | 4 ++ guile/nyacc-calc.scm | 77 ++++++++++++++++++++++++++++++++++ guile/nyacc.scm | 38 +++++++++++++++++ scripts/mescc.mes | 2 +- scripts/nyacc-calc.mes | 95 ++++++++++++++++++++++++++++++++++++++++++ scripts/nyacc.mes | 58 ++++++++++++++++++++++++++ scripts/paren.mes | 3 +- scripts/repl.mes | 2 +- 8 files changed, 275 insertions(+), 4 deletions(-) create mode 100755 guile/nyacc-calc.scm create mode 100755 guile/nyacc.scm create mode 100755 scripts/nyacc-calc.mes create mode 100755 scripts/nyacc.mes diff --git a/GNUmakefile b/GNUmakefile index 7623b603..782e48fe 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -81,6 +81,8 @@ MES_DEBUG:=1 mes-check: all set -e; for i in $(TESTS); do ./$$i; done + scripts/nyacc.mes + scripts/nyacc-calc.mes module/mes/read-0.mo: module/mes/read-0.mes mes ./mes --dump < $< > $@ @@ -91,6 +93,8 @@ guile-check: set -e; for i in $(TESTS); do\ $(GUILE) -s <(cat $(MES-0) module/mes/test.mes $$i);\ done + guile/nyacc.scm + guile/nyacc-calc.scm MAIN_C:=doc/examples/main.c mescc: all diff --git a/guile/nyacc-calc.scm b/guile/nyacc-calc.scm new file mode 100755 index 00000000..2f41536c --- /dev/null +++ b/guile/nyacc-calc.scm @@ -0,0 +1,77 @@ +#! /bin/sh +# -*-scheme-*- +exec guile -L $(pwd)/module -e '(nyacc)' -s "$0" "$@" +!# + +;;; Mes --- The Maxwell Equations of Software +;;; Copyright © 2016 Jan Nieuwenhuizen +;;; +;;; This file is part of GNU Guix. +;;; +;;; 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 . + +;; The Maxwell Equations of Software -- John McCarthy page 13 +;; http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf + +;; Tcalc.scm - calculator +;; +;; Copyright (C) 2015 Matthew R. Wette +;; +;; Copying and distribution of this file, with or without modification, +;; are permitted in any medium without royalty provided the copyright +;; notice and this notice are preserved. This file is offered as-is, +;; without any warranty. + +(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)) diff --git a/guile/nyacc.scm b/guile/nyacc.scm new file mode 100755 index 00000000..1a20d8c8 --- /dev/null +++ b/guile/nyacc.scm @@ -0,0 +1,38 @@ +#! /bin/sh +# -*-scheme-*- +exec guile -L $(pwd)/module -e '(nyacc)' -s "$0" "$@" +!# + +;;; Mes --- The Maxwell Equations of Software +;;; Copyright © 2016 Jan Nieuwenhuizen +;;; +;;; This file is part of GNU Guix. +;;; +;;; 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 . + +;; The Maxwell Equations of Software -- John McCarthy page 13 +;; http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf + +(define-module (nyacc) + #:use-module (nyacc lang c99 parser) + #:use-module (ice-9 rdelim) + #:use-module (ice-9 pretty-print) + #:export (main)) + +(define (main arguments) + (let* ((file (if (> (length arguments) 1) (cadr arguments) + "doc/examples/main.c")) + (ast (with-input-from-file file + (lambda () (parse-c99 #:inc-dirs '()))))) + (pretty-print ast))) diff --git a/scripts/mescc.mes b/scripts/mescc.mes index b0d56cc2..76d2fb30 100755 --- a/scripts/mescc.mes +++ b/scripts/mescc.mes @@ -9,7 +9,7 @@ exit $? ;;; Mes --- Maxwell Equations of Software ;;; Copyright © 2016 Jan Nieuwenhuizen ;;; -;;; mescc.mes: This file is part of Mes. +;;; 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 diff --git a/scripts/nyacc-calc.mes b/scripts/nyacc-calc.mes new file mode 100755 index 00000000..428223b8 --- /dev/null +++ b/scripts/nyacc-calc.mes @@ -0,0 +1,95 @@ +#! /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) +() diff --git a/scripts/nyacc.mes b/scripts/nyacc.mes new file mode 100755 index 00000000..d7b640b3 --- /dev/null +++ b/scripts/nyacc.mes @@ -0,0 +1,58 @@ +#! /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.mes +;;; +;;; Run with Guile: +;;; guile/nyacc.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 lang c99 parser)) + +;;(open-input-file "doc/examples/main.c") +(define (main arguments) + (let* ((file (if (> (length arguments) 1) (cadr arguments) + "doc/examples/main.c")) + (ast (with-input-from-file file + (lambda () (parse-c99 #:inc-dirs '()))))) + (pretty-print ast) + (newline))) +(main '()) +() diff --git a/scripts/paren.mes b/scripts/paren.mes index 0af036e4..2c124260 100755 --- a/scripts/paren.mes +++ b/scripts/paren.mes @@ -7,10 +7,9 @@ exit $? !# ;;; Mes --- Maxwell Equations of Software -;;; Copyright © 2008 Derek Peschel ;;; Copyright © 2016 Jan Nieuwenhuizen ;;; -;;; paren.mes: This file is part of Mes. +;;; 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 diff --git a/scripts/repl.mes b/scripts/repl.mes index 3292bf54..4bece9c6 100755 --- a/scripts/repl.mes +++ b/scripts/repl.mes @@ -11,7 +11,7 @@ exit $? ;;; Mes --- Maxwell Equations of Software ;;; Copyright © 2016 Jan Nieuwenhuizen ;;; -;;; repl.mes: This file is part of Mes. +;;; 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