Add Nyacc example scripts.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 18 Dec 2016 14:44:09 +0000 (15:44 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 18 Dec 2016 14:44:09 +0000 (15:44 +0100)
* 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
guile/nyacc-calc.scm [new file with mode: 0755]
guile/nyacc.scm [new file with mode: 0755]
scripts/mescc.mes
scripts/nyacc-calc.mes [new file with mode: 0755]
scripts/nyacc.mes [new file with mode: 0755]
scripts/paren.mes
scripts/repl.mes

index 7623b603bf100f523507412a7e67d15262438a6e..782e48fecb4316ee8bf0537426f7eb44638c8595 100644 (file)
@@ -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 (executable)
index 0000000..2f41536
--- /dev/null
@@ -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 <janneke@gnu.org>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+;; 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 (executable)
index 0000000..1a20d8c
--- /dev/null
@@ -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 <janneke@gnu.org>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+;; 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)))
index b0d56cc26a352a19fd25008620389fa662a5eb5e..76d2fb3044f8faf7d645ea876f8d79495fd8e1b4 100755 (executable)
@@ -9,7 +9,7 @@ exit $?
 ;;; Mes --- Maxwell Equations of Software
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
-;;; 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 (executable)
index 0000000..428223b
--- /dev/null
@@ -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 <janneke@gnu.org>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+;;; 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 (executable)
index 0000000..d7b640b
--- /dev/null
@@ -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 <janneke@gnu.org>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+;;; 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 '())
+()
index 0af036e42ab697fc4f03756aabbbc4b8893364f0..2c1242603fb82d4291cf2259f831c62bc5b7ad1b 100755 (executable)
@@ -7,10 +7,9 @@ exit $?
 !#
 
 ;;; Mes --- Maxwell Equations of Software
-;;; Copyright © 2008 Derek Peschel
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
-;;; 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
index 3292bf54a0293962be6485f6c4194655917d26da..4bece9c62bc701282a2a0e03c62a508b2fa74b83 100755 (executable)
@@ -11,7 +11,7 @@ exit $?
 ;;; Mes --- Maxwell Equations of Software
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
-;;; 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