X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/ae16d111d8e4eb2aea52d94103b76e9f31ebcb52..1a9203d09eb108a7c9d3b79c20783c36e938a634:/lisp/progmodes/ebnf-iso.el diff --git a/lisp/progmodes/ebnf-iso.el b/lisp/progmodes/ebnf-iso.el index 1ec1293a14..f36065bd55 100644 --- a/lisp/progmodes/ebnf-iso.el +++ b/lisp/progmodes/ebnf-iso.el @@ -1,12 +1,13 @@ ;;; ebnf-iso.el --- parser for ISO EBNF -;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 +;; Free Software Foundation, Inc. -;; Author: Vinicius Jose Latorre -;; Maintainer: Vinicius Jose Latorre +;; Author: Vinicius Jose Latorre +;; Maintainer: Vinicius Jose Latorre +;; Time-stamp: <2004/04/03 16:48:52 vinicius> ;; Keywords: wp, ebnf, PostScript -;; Time-stamp: <2001/08/15 17:12:51 vinicius> -;; Version: 1.5 +;; Version: 1.8 ;; This file is part of GNU Emacs. @@ -112,7 +113,8 @@ ;; ISO EBNF accepts the characters given by production above, ;; HORIZONTAL TAB (^I), VERTICAL TAB (^K), NEWLINE (^J or ^M) and FORM FEED ;; (^L), any other characters are illegal. But ebnf2ps accepts also the -;; european 8-bit accentuated characters (from \240 to \377). +;; european 8-bit accentuated characters (from \240 to \377) and underscore +;; (_). ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -127,11 +129,12 @@ "Value returned by `ebnf-iso-lex' function.") -(defconst ebnf-no-meta-identifier nil) +(defvar ebnf-no-meta-identifier nil + "Used by `ebnf-iso-term' and `ebnf-iso-lex' functions.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Syntatic analyzer +;; Syntactic analyzer ;;; ISO EBNF = syntax rule, {syntax rule}; @@ -200,17 +203,9 @@ (eq token 'catenate)) (setq seq (cons term seq))) (cons token - (cond - ;; null sequence - ((null seq) - term) - ;; sequence with only one element - ((and (null term) (= (length seq) 1)) - (car seq)) - ;; a real sequence - (t - (ebnf-make-sequence (nreverse (cons term seq)))) - )))) + (ebnf-token-sequence (if term + (cons term seq) + seq))))) ;;; term = factor, ['-', exception]; @@ -345,6 +340,7 @@ ;; Override form feed character: (aset table ?\f 'form-feed) ; [FF] form feed ;; Override other lexical characters: + (aset table ?_ 'non-terminal) (aset table ?\" 'double-terminal) (aset table ?\' 'single-terminal) (aset table ?\? 'special) @@ -387,6 +383,11 @@ (aset ebnf-iso-token-table ?. 'character))) +;; replace the range "\240-\377" (see `ebnf-range-regexp'). +(defconst ebnf-iso-non-terminal-chars + (ebnf-range-regexp " 0-9A-Za-z_" ?\240 ?\377)) + + (defun ebnf-iso-lex () "Lexical analyser for ISO EBNF. @@ -433,9 +434,9 @@ See documentation for variable `ebnf-iso-lex'." 'integer) ;; special: ?special? ((eq token 'special) - (setq ebnf-iso-lex (concat "?" + (setq ebnf-iso-lex (concat (and ebnf-special-show-delimiter "?") (ebnf-string " ->@-~" ?\? "special") - "?")) + (and ebnf-special-show-delimiter "?"))) 'special) ;; terminal: "string" ((eq token 'double-terminal) @@ -447,9 +448,10 @@ See documentation for variable `ebnf-iso-lex'." 'terminal) ;; non-terminal ((eq token 'non-terminal) - (setq ebnf-iso-lex (ebnf-iso-normalize - (ebnf-trim-right - (ebnf-buffer-substring " 0-9A-Za-z\240-\377")))) + (setq ebnf-iso-lex + (ebnf-iso-normalize + (ebnf-trim-right + (ebnf-buffer-substring ebnf-iso-non-terminal-chars)))) (and ebnf-no-meta-identifier (error "Exception sequence should not contain a meta identifier")) 'non-terminal) @@ -606,4 +608,5 @@ See documentation for variable `ebnf-iso-lex'." (provide 'ebnf-iso) +;;; arch-tag: 03315eef-8f64-404a-bf9d-256d42442ee3 ;;; ebnf-iso.el ends here