X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/e8af40eed41d6c61ea6a0649512c4b09afcb1bfa..7c511b96e0cc692a4b772fe34ed7470b4020c20e:/lisp/progmodes/ebnf-otz.el diff --git a/lisp/progmodes/ebnf-otz.el b/lisp/progmodes/ebnf-otz.el index 0969f873bb..1aa8feb25a 100644 --- a/lisp/progmodes/ebnf-otz.el +++ b/lisp/progmodes/ebnf-otz.el @@ -1,12 +1,13 @@ -;;; ebnf-otz.el --- syntatic chart OpTimiZer +;;; ebnf-otz.el --- syntactic chart OpTimiZer -;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +;; Free Sofware Foundation, Inc. -;; Author: Vinicius Jose Latorre -;; Maintainer: Vinicius Jose Latorre -;; Keywords: wp, ebnf, PostScript -;; Time-stamp: <2001-07-15 01:03:33 pavel> -;; Version: 1.0 +;; Author: Vinicius Jose Latorre +;; Maintainer: Vinicius Jose Latorre +;; Time-stamp: <2004/11/19 22:24:07 vinicius> +;; Keywords: wp, ebnf, PostScript +;; Version: 1.0 ;; This file is part of GNU Emacs. @@ -37,6 +38,46 @@ ;; See ebnf2ps.el for documentation. ;; ;; +;; Optimizations +;; ------------- +;; +;; +;; *To be implemented*: +;; left recursion: +;; A = B | A C B | A C D. ==> A = B {C (B | D)}*. +;; +;; right recursion: +;; A = B | C A. ==> A = {C}* B. +;; A = B | D | C A | E A. ==> A = { C | E }* ( B | D ). +;; +;; optional: +;; A = B | C B. ==> A = [C] B. +;; A = B | B C. ==> A = B [C]. +;; A = D | B D | B C D. ==> A = [B [C]] D. +;; +;; +;; *Already implemented*: +;; left recursion: +;; A = B | A C. ==> A = B {C}*. +;; A = B | A B. ==> A = {B}+. +;; A = | A B. ==> A = {B}*. +;; A = B | A C B. ==> A = {B || C}+. +;; A = B | D | A C | A E. ==> A = ( B | D ) { C | E }*. +;; +;; optional: +;; A = B | . ==> A = [B]. +;; A = | B . ==> A = [B]. +;; +;; factorization: +;; A = B C | B D. ==> A = B (C | D). +;; A = C B | D B. ==> A = (C | D) B. +;; A = B C E | B D E. ==> A = B (C | D) E. +;; +;; none: +;; A = B | C | . ==> A = B | C | . +;; A = B | C A D. ==> A = B | C A D. +;; +;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Code: @@ -186,7 +227,7 @@ ;; A = B | . ==> A = [B]. ;; A = | B . ==> A = [B]. -;; factoration: +;; factorization: ;; A = B C | B D. ==> A = B (C | D). ;; A = C B | D B. ==> A = (C | D) B. ;; A = B C E | B D E. ==> A = B (C | D) E. @@ -196,7 +237,7 @@ ;; A = B | C A D. ==> A = B | C A D. (defun ebnf-optimize (syntax-list) - "Syntatic chart optimizer." + "Syntactic chart optimizer." (if (not ebnf-optimize) syntax-list (let ((ebnf-total (length syntax-list)) @@ -219,13 +260,13 @@ ;; 6. A = B | . ==> A = [B]. ;; 7. A = | B . ==> A = [B]. -;; factoration: +;; factorization: ;; 8. A = B C | B D. ==> A = B (C | D). ;; 9. A = C B | D B. ==> A = (C | D) B. ;; 10. A = B C E | B D E. ==> A = B (C | D) E. (defun ebnf-optimize1 (prod) - (ebnf-message-info "Optimizing syntatic chart") + (ebnf-message-info "Optimizing syntactic chart") (let ((production (ebnf-node-production prod))) (and (eq (ebnf-node-kind production) 'ebnf-generate-alternative) (let* ((hlist (ebnf-split-header-prefix @@ -658,4 +699,5 @@ (provide 'ebnf-otz) +;;; arch-tag: 7ef2249d-9e8b-4bc1-999f-95d784690636 ;;; ebnf-otz.el ends here