annotate lisp/progmodes/ebnf-abn.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents 87f9bb9d3718
children 6465d5fb8665 4da4a09e8b1b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
1 ;;; ebnf-abn.el --- parser for ABNF (Augmented BNF)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
2
60917
87f9bb9d3718 * progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el,
Werner LEMBERG <wl@gnu.org>
parents: 54714
diff changeset
3 ;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc.
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
4
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
5 ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
6 ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
54714
fc6e53c00fcf ebnf2ps 4.2
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 54622
diff changeset
7 ;; Time-stamp: <2004/04/03 16:43:57 vinicius>
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
8 ;; Keywords: wp, ebnf, PostScript
54714
fc6e53c00fcf ebnf2ps 4.2
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 54622
diff changeset
9 ;; Version: 1.1
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
10
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
12
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
16 ;; any later version.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
17
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
21 ;; GNU General Public License for more details.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
22
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
26 ;; Boston, MA 02111-1307, USA.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
27
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
28 ;;; Commentary:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
29
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
30 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
31 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
32 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
33 ;; This is part of ebnf2ps package.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
34 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
35 ;; This package defines a parser for ABNF (Augmented BNF).
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
36 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
37 ;; See ebnf2ps.el for documentation.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
38 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
39 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
40 ;; ABNF Syntax
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
41 ;; -----------
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
42 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
43 ;; See the URL:
54190
6a7a401e1598 Doc fix.
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 54141
diff changeset
44 ;; `http://www.ietf.org/rfc/rfc2234.txt'
6a7a401e1598 Doc fix.
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 54141
diff changeset
45 ;; or
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
46 ;; `http://www.faqs.org/rfcs/rfc2234.html'
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
47 ;; or
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
48 ;; `http://www.rnp.br/ietf/rfc/rfc2234.txt'
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
49 ;; ("Augmented BNF for Syntax Specifications: ABNF").
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
50 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
51 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
52 ;; rulelist = 1*( rule / (*c-wsp c-nl) )
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
53 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
54 ;; rule = rulename defined-as elements c-nl
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
55 ;; ; continues if next line starts with white space
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
56 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
57 ;; rulename = ALPHA *(ALPHA / DIGIT / "-")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
58 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
59 ;; defined-as = *c-wsp ("=" / "=/") *c-wsp
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
60 ;; ; basic rules definition and incremental
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
61 ;; ; alternatives
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
62 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
63 ;; elements = alternation *c-wsp
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
64 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
65 ;; c-wsp = WSP / (c-nl WSP)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
66 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
67 ;; c-nl = comment / CRLF
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
68 ;; ; comment or newline
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
69 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
70 ;; comment = ";" *(WSP / VCHAR) CRLF
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
71 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
72 ;; alternation = concatenation
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
73 ;; *(*c-wsp "/" *c-wsp concatenation)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
74 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
75 ;; concatenation = repetition *(1*c-wsp repetition)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
76 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
77 ;; repetition = [repeat] element
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
78 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
79 ;; repeat = 1*DIGIT / (*DIGIT "*" *DIGIT)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
80 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
81 ;; element = rulename / group / option /
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
82 ;; char-val / num-val / prose-val
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
83 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
84 ;; group = "(" *c-wsp alternation *c-wsp ")"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
85 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
86 ;; option = "[" *c-wsp alternation *c-wsp "]"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
87 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
88 ;; char-val = DQUOTE *(%x20-21 / %x23-7E) DQUOTE
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
89 ;; ; quoted string of SP and VCHAR without DQUOTE
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
90 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
91 ;; num-val = "%" (bin-val / dec-val / hex-val)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
92 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
93 ;; bin-val = "b" 1*BIT
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
94 ;; [ 1*("." 1*BIT) / ("-" 1*BIT) ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
95 ;; ; series of concatenated bit values
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
96 ;; ; or single ONEOF range
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
97 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
98 ;; dec-val = "d" 1*DIGIT
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
99 ;; [ 1*("." 1*DIGIT) / ("-" 1*DIGIT) ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
100 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
101 ;; hex-val = "x" 1*HEXDIG
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
102 ;; [ 1*("." 1*HEXDIG) / ("-" 1*HEXDIG) ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
103 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
104 ;; prose-val = "<" *(%x20-3D / %x3F-7E) ">"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
105 ;; ; bracketed string of SP and VCHAR without
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
106 ;; ; angles
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
107 ;; ; prose description, to be used as last resort
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
108 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
109 ;; ; Core rules -- the coding depends on the system, here is used 7-bit ASCII
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
110 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
111 ;; ALPHA = %x41-5A / %x61-7A
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
112 ;; ; A-Z / a-z
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
113 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
114 ;; BIT = "0" / "1"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
115 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
116 ;; CHAR = %x01-7F
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
117 ;; ; any 7-bit US-ASCII character, excluding NUL
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
118 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
119 ;; CR = %x0D
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
120 ;; ; carriage return
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
121 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
122 ;; CRLF = CR LF
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
123 ;; ; Internet standard newline
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
124 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
125 ;; CTL = %x00-1F / %x7F
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
126 ;; ; controls
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
127 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
128 ;; DIGIT = %x30-39
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
129 ;; ; 0-9
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
130 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
131 ;; DQUOTE = %x22
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
132 ;; ; " (Double Quote)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
133 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
134 ;; HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
135 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
136 ;; HTAB = %x09
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
137 ;; ; horizontal tab
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
138 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
139 ;; LF = %x0A
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
140 ;; ; linefeed
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
141 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
142 ;; LWSP = *(WSP / CRLF WSP)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
143 ;; ; linear white space (past newline)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
144 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
145 ;; OCTET = %x00-FF
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
146 ;; ; 8 bits of data
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
147 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
148 ;; SP = %x20
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
149 ;; ; space
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
150 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
151 ;; VCHAR = %x21-7E
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
152 ;; ; visible (printing) characters
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
153 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
154 ;; WSP = SP / HTAB
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
155 ;; ; white space
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
156 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
157 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
158 ;; NOTES:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
159 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
160 ;; 1. Rules name and terminal strings are case INSENSITIVE.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
161 ;; So, the following rule names are all equals:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
162 ;; Rule-name, rule-Name, rule-name, RULE-NAME
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
163 ;; Also, the following strings are equals:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
164 ;; "abc", "ABC", "aBc", "Abc", "aBC", etc.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
165 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
166 ;; 2. To have a case SENSITIVE string, use the character notation.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
167 ;; For example, to specify the lowercase string "abc", use:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
168 ;; %d97.98.99
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
169 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
170 ;; 3. There are no implicit spaces between elements, for example, the
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
171 ;; following rules:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
172 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
173 ;; foo = %x61 ; a
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
174 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
175 ;; bar = %x62 ; b
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
176 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
177 ;; mumble = foo bar foo
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
178 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
179 ;; Are equivalent to the following rule:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
180 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
181 ;; mumble = %x61.62.61
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
182 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
183 ;; If spaces are needed, it should be explicit specified, like:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
184 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
185 ;; spaces = 1*(%x20 / %x09) ; one or more spaces or tabs
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
186 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
187 ;; mumble = foo spaces bar spaces foo
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
188 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
189 ;; 4. Lines starting with space or tab are considered a continuation line.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
190 ;; For example, the rule:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
191 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
192 ;; rule = foo
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
193 ;; bar
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
194 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
195 ;; Is equivalent to:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
196 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
197 ;; rule = foo bar
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
198 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
199 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
200 ;; Differences Between ABNF And ebnf2ps ABNF
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
201 ;; -----------------------------------------
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
202 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
203 ;; Besides the characters that ABNF accepts, ebnf2ps ABNF accepts also the
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
204 ;; underscore (_) for rule name and european 8-bit accentuated characters (from
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
205 ;; \240 to \377) for rule name, string and comment.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
206 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
207 ;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
208 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
209
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
210 ;;; Code:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
211
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
212
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
213 (require 'ebnf-otz)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
214
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
215
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
216 (defvar ebnf-abn-lex nil
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
217 "Value returned by `ebnf-abn-lex' function.")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
218
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
219
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
220 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
221 ;; Syntactic analyzer
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
222
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
223
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
224 ;;; rulelist = 1*( rule / (*c-wsp c-nl) )
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
225
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
226 (defun ebnf-abn-parser (start)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
227 "ABNF parser."
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
228 (let ((total (+ (- ebnf-limit start) 1))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
229 (bias (1- start))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
230 (origin (point))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
231 rule-list token rule)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
232 (goto-char start)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
233 (setq token (ebnf-abn-lex))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
234 (and (eq token 'end-of-input)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
235 (error "Invalid ABNF file format"))
54622
f7bb72b19510 Handle initial comments.
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 54190
diff changeset
236 (and (eq token 'end-of-rule)
f7bb72b19510 Handle initial comments.
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 54190
diff changeset
237 (setq token (ebnf-abn-lex)))
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
238 (while (not (eq token 'end-of-input))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
239 (ebnf-message-float
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
240 "Parsing...%s%%"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
241 (/ (* (- (point) bias) 100.0) total))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
242 (setq token (ebnf-abn-rule token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
243 rule (cdr token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
244 token (car token))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
245 (or (ebnf-add-empty-rule-list rule)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
246 (setq rule-list (cons rule rule-list))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
247 (goto-char origin)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
248 rule-list))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
249
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
250
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
251 ;;; rule = rulename defined-as elements c-nl
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
252 ;;; ; continues if next line starts with white space
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
253 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
254 ;;; rulename = ALPHA *(ALPHA / DIGIT / "-")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
255 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
256 ;;; defined-as = *c-wsp ("=" / "=/") *c-wsp
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
257 ;;; ; basic rules definition and incremental
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
258 ;;; ; alternatives
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
259 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
260 ;;; elements = alternation *c-wsp
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
261 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
262 ;;; c-wsp = WSP / (c-nl WSP)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
263 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
264 ;;; c-nl = comment / CRLF
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
265 ;;; ; comment or newline
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
266 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
267 ;;; comment = ";" *(WSP / VCHAR) CRLF
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
268
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
269
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
270 (defun ebnf-abn-rule (token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
271 (let ((name ebnf-abn-lex)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
272 (action ebnf-action)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
273 elements)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
274 (setq ebnf-action nil)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
275 (or (eq token 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
276 (error "Invalid rule name"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
277 (setq token (ebnf-abn-lex))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
278 (or (memq token '(equal incremental-alternative))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
279 (error "Invalid rule: missing `=' or `=/'"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
280 (and (eq token 'incremental-alternative)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
281 (setq name (concat name " =/")))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
282 (setq elements (ebnf-abn-alternation))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
283 (or (memq (car elements) '(end-of-rule end-of-input))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
284 (error "Invalid rule: there is no end of rule"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
285 (setq elements (cdr elements))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
286 (ebnf-eps-add-production name)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
287 (cons (ebnf-abn-lex)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
288 (ebnf-make-production name elements action))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
289
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
290
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
291 ;;; alternation = concatenation
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
292 ;;; *(*c-wsp "/" *c-wsp concatenation)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
293
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
294
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
295 (defun ebnf-abn-alternation ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
296 (let (body concatenation)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
297 (while (eq (car (setq concatenation
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
298 (ebnf-abn-concatenation (ebnf-abn-lex))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
299 'alternative)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
300 (setq body (cons (cdr concatenation) body)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
301 (ebnf-token-alternative body concatenation)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
302
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
303
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
304 ;;; concatenation = repetition *(1*c-wsp repetition)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
305
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
306
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
307 (defun ebnf-abn-concatenation (token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
308 (let ((term (ebnf-abn-repetition token))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
309 seq)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
310 (or (setq token (car term)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
311 term (cdr term))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
312 (error "Empty element"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
313 (setq seq (cons term seq))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
314 (while (setq term (ebnf-abn-repetition token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
315 token (car term)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
316 term (cdr term))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
317 (setq seq (cons term seq)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
318 (cons token
54714
fc6e53c00fcf ebnf2ps 4.2
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents: 54622
diff changeset
319 (ebnf-token-sequence seq))))
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
320
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
321
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
322 ;;; repetition = [repeat] element
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
323 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
324 ;;; repeat = 1*DIGIT / (*DIGIT "*" *DIGIT)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
325
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
326
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
327 (defun ebnf-abn-repetition (token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
328 (let (lower upper)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
329 ;; INTEGER [ "*" [ INTEGER ] ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
330 (when (eq token 'integer)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
331 (setq lower ebnf-abn-lex
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
332 token (ebnf-abn-lex))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
333 (or (eq token 'repeat)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
334 (setq upper lower)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
335 ;; "*" [ INTEGER ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
336 (when (eq token 'repeat)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
337 ;; only * ==> lower & upper are empty string
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
338 (or lower
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
339 (setq lower ""
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
340 upper ""))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
341 (when (eq (setq token (ebnf-abn-lex)) 'integer)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
342 (setq upper ebnf-abn-lex
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
343 token (ebnf-abn-lex))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
344 (let ((element (ebnf-abn-element token)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
345 (cond
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
346 ;; there is a repetition
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
347 (lower
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
348 (or element
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
349 (error "Missing element repetition"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
350 (setq token (ebnf-abn-lex))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
351 (cond
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
352 ;; one or more
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
353 ((and (string= lower "1") (null upper))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
354 (cons token (ebnf-make-one-or-more element)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
355 ;; zero or more
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
356 ((or (and (string= lower "0") (null upper))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
357 (and (string= lower "") (string= upper "")))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
358 (cons token (ebnf-make-zero-or-more element)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
359 ;; real repetition
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
360 (t
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
361 (ebnf-token-repeat lower (cons token element) upper))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
362 ;; there is an element
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
363 (element
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
364 (cons (ebnf-abn-lex) element))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
365 ;; something that caller has to deal
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
366 (t
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
367 (cons token nil))))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
368
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
369
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
370 ;;; element = rulename / group / option /
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
371 ;;; char-val / num-val / prose-val
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
372 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
373 ;;; group = "(" *c-wsp alternation *c-wsp ")"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
374 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
375 ;;; option = "[" *c-wsp alternation *c-wsp "]"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
376 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
377 ;;; char-val = DQUOTE *(%x20-21 / %x23-7E) DQUOTE
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
378 ;;; ; quoted string of SP and VCHAR without DQUOTE
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
379 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
380 ;;; num-val = "%" (bin-val / dec-val / hex-val)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
381 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
382 ;;; bin-val = "b" 1*BIT
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
383 ;;; [ 1*("." 1*BIT) / ("-" 1*BIT) ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
384 ;;; ; series of concatenated bit values
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
385 ;;; ; or single ONEOF range
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
386 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
387 ;;; dec-val = "d" 1*DIGIT
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
388 ;;; [ 1*("." 1*DIGIT) / ("-" 1*DIGIT) ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
389 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
390 ;;; hex-val = "x" 1*HEXDIG
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
391 ;;; [ 1*("." 1*HEXDIG) / ("-" 1*HEXDIG) ]
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
392 ;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
393 ;;; prose-val = "<" *(%x20-3D / %x3F-7E) ">"
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
394 ;;; ; bracketed string of SP and VCHAR without
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
395 ;;; ; angles
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
396 ;;; ; prose description, to be used as last resort
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
397
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
398
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
399 (defun ebnf-abn-element (token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
400 (cond
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
401 ;; terminal
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
402 ((eq token 'terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
403 (ebnf-make-terminal ebnf-abn-lex))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
404 ;; non-terminal
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
405 ((eq token 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
406 (ebnf-make-non-terminal ebnf-abn-lex))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
407 ;; group
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
408 ((eq token 'begin-group)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
409 (let ((body (ebnf-abn-alternation)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
410 (or (eq (car body) 'end-group)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
411 (error "Missing `)'"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
412 (cdr body)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
413 ;; optional
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
414 ((eq token 'begin-optional)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
415 (let ((body (ebnf-abn-alternation)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
416 (or (eq (car body) 'end-optional)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
417 (error "Missing `]'"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
418 (ebnf-token-optional (cdr body))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
419 ;; no element
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
420 (t
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
421 nil)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
422 ))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
423
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
424
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
425 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
426 ;; Lexical analyzer
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
427
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
428
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
429 (defconst ebnf-abn-token-table (make-vector 256 'error)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
430 "Vector used to map characters to a lexical token.")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
431
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
432
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
433 (defun ebnf-abn-initialize ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
434 "Initialize EBNF token table."
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
435 ;; control character & control 8-bit character are set to `error'
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
436 (let ((char ?\060))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
437 ;; digits: 0-9
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
438 (while (< char ?\072)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
439 (aset ebnf-abn-token-table char 'integer)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
440 (setq char (1+ char)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
441 ;; printable character: A-Z
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
442 (setq char ?\101)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
443 (while (< char ?\133)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
444 (aset ebnf-abn-token-table char 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
445 (setq char (1+ char)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
446 ;; printable character: a-z
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
447 (setq char ?\141)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
448 (while (< char ?\173)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
449 (aset ebnf-abn-token-table char 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
450 (setq char (1+ char)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
451 ;; European 8-bit accentuated characters:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
452 (setq char ?\240)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
453 (while (< char ?\400)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
454 (aset ebnf-abn-token-table char 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
455 (setq char (1+ char)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
456 ;; Override end of line characters:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
457 (aset ebnf-abn-token-table ?\n 'end-of-rule) ; [NL] linefeed
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
458 (aset ebnf-abn-token-table ?\r 'end-of-rule) ; [CR] carriage return
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
459 ;; Override space characters:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
460 (aset ebnf-abn-token-table ?\013 'space) ; [VT] vertical tab
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
461 (aset ebnf-abn-token-table ?\t 'space) ; [HT] horizontal tab
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
462 (aset ebnf-abn-token-table ?\ 'space) ; [SP] space
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
463 ;; Override form feed character:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
464 (aset ebnf-abn-token-table ?\f 'form-feed) ; [FF] form feed
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
465 ;; Override other lexical characters:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
466 (aset ebnf-abn-token-table ?< 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
467 (aset ebnf-abn-token-table ?% 'terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
468 (aset ebnf-abn-token-table ?\" 'terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
469 (aset ebnf-abn-token-table ?\( 'begin-group)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
470 (aset ebnf-abn-token-table ?\) 'end-group)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
471 (aset ebnf-abn-token-table ?* 'repeat)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
472 (aset ebnf-abn-token-table ?= 'equal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
473 (aset ebnf-abn-token-table ?\[ 'begin-optional)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
474 (aset ebnf-abn-token-table ?\] 'end-optional)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
475 (aset ebnf-abn-token-table ?/ 'alternative)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
476 ;; Override comment character:
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
477 (aset ebnf-abn-token-table ?\; 'comment)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
478
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
479
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
480 ;; replace the range "\240-\377" (see `ebnf-range-regexp').
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
481 (defconst ebnf-abn-non-terminal-chars
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
482 (ebnf-range-regexp "-_0-9A-Za-z" ?\240 ?\377))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
483 (defconst ebnf-abn-non-terminal-letter-chars
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
484 (ebnf-range-regexp "A-Za-z" ?\240 ?\377))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
485
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
486
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
487 (defun ebnf-abn-lex ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
488 "Lexical analyser for ABNF.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
489
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
490 Return a lexical token.
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
491
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
492 See documentation for variable `ebnf-abn-lex'."
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
493 (if (>= (point) ebnf-limit)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
494 'end-of-input
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
495 (let (token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
496 ;; skip spaces and comments
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
497 (while (if (> (following-char) 255)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
498 (progn
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
499 (setq token 'error)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
500 nil)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
501 (setq token (aref ebnf-abn-token-table (following-char)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
502 (cond
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
503 ((eq token 'space)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
504 (skip-chars-forward " \013\t" ebnf-limit)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
505 (< (point) ebnf-limit))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
506 ((eq token 'comment)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
507 (ebnf-abn-skip-comment))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
508 ((eq token 'form-feed)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
509 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
510 (setq ebnf-action 'form-feed))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
511 ((eq token 'end-of-rule)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
512 (ebnf-abn-skip-end-of-rule))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
513 (t nil)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
514 )))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
515 (cond
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
516 ;; end of input
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
517 ((>= (point) ebnf-limit)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
518 'end-of-input)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
519 ;; error
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
520 ((eq token 'error)
60917
87f9bb9d3718 * progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el,
Werner LEMBERG <wl@gnu.org>
parents: 54714
diff changeset
521 (error "Invalid character"))
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
522 ;; end of rule
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
523 ((eq token 'end-of-rule)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
524 'end-of-rule)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
525 ;; integer
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
526 ((eq token 'integer)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
527 (setq ebnf-abn-lex (ebnf-buffer-substring "0-9"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
528 'integer)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
529 ;; terminal: "string" or %[bdx]NNN((.NNN)+|-NNN)?
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
530 ((eq token 'terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
531 (setq ebnf-abn-lex
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
532 (if (= (following-char) ?\")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
533 (ebnf-abn-string)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
534 (ebnf-abn-character)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
535 'terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
536 ;; non-terminal: NAME or <NAME>
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
537 ((eq token 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
538 (let ((prose-p (= (following-char) ?<)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
539 (when prose-p
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
540 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
541 (or (looking-at ebnf-abn-non-terminal-letter-chars)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
542 (error "Invalid prose value")))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
543 (setq ebnf-abn-lex
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
544 (ebnf-buffer-substring ebnf-abn-non-terminal-chars))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
545 (when prose-p
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
546 (or (= (following-char) ?>)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
547 (error "Invalid prose value"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
548 (setq ebnf-abn-lex (concat "<" ebnf-abn-lex ">"))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
549 'non-terminal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
550 ;; equal: =, =/
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
551 ((eq token 'equal)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
552 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
553 (if (/= (following-char) ?/)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
554 'equal
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
555 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
556 'incremental-alternative))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
557 ;; miscellaneous: (, ), [, ], /, *
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
558 (t
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
559 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
560 token)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
561 ))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
562
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
563
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
564 (defun ebnf-abn-skip-end-of-rule ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
565 (let (eor-p)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
566 (while (progn
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
567 ;; end of rule ==> 2 or more consecutive end of lines
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
568 (setq eor-p (or (> (skip-chars-forward "\r\n" ebnf-limit) 1)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
569 eor-p))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
570 ;; skip spaces
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
571 (skip-chars-forward " \013\t" ebnf-limit)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
572 ;; skip comments
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
573 (and (= (following-char) ?\;)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
574 (ebnf-abn-skip-comment))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
575 (not eor-p)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
576
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
577
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
578 ;; replace the range "\177-\237" (see `ebnf-range-regexp').
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
579 (defconst ebnf-abn-comment-chars
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
580 (ebnf-range-regexp "^\n\000-\010\016-\037" ?\177 ?\237))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
581
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
582
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
583 (defun ebnf-abn-skip-comment ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
584 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
585 (cond
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
586 ;; open EPS file
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
587 ((and ebnf-eps-executing (= (following-char) ?\[))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
588 (ebnf-eps-add-context (ebnf-abn-eps-filename)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
589 ;; close EPS file
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
590 ((and ebnf-eps-executing (= (following-char) ?\]))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
591 (ebnf-eps-remove-context (ebnf-abn-eps-filename)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
592 ;; any other action in comment
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
593 (t
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
594 (setq ebnf-action (aref ebnf-comment-table (following-char)))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
595 (skip-chars-forward ebnf-abn-comment-chars ebnf-limit))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
596 )
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
597 ;; check for a valid end of comment
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
598 (cond ((>= (point) ebnf-limit)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
599 nil)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
600 ((= (following-char) ?\n)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
601 t)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
602 (t
60917
87f9bb9d3718 * progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el,
Werner LEMBERG <wl@gnu.org>
parents: 54714
diff changeset
603 (error "Invalid character"))
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
604 ))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
605
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
606
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
607 (defun ebnf-abn-eps-filename ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
608 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
609 (ebnf-buffer-substring ebnf-abn-comment-chars))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
610
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
611
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
612 ;; replace the range "\240-\377" (see `ebnf-range-regexp').
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
613 (defconst ebnf-abn-string-chars
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
614 (ebnf-range-regexp " -!#-~" ?\240 ?\377))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
615
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
616
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
617 (defun ebnf-abn-string ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
618 (buffer-substring-no-properties
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
619 (progn
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
620 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
621 (point))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
622 (progn
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
623 (skip-chars-forward ebnf-abn-string-chars ebnf-limit)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
624 (or (= (following-char) ?\")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
625 (error "Missing `\"'"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
626 (prog1
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
627 (point)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
628 (forward-char)))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
629
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
630
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
631 (defun ebnf-abn-character ()
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
632 ;; %[bdx]NNN((-NNN)|(.NNN)+)?
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
633 (buffer-substring-no-properties
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
634 (point)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
635 (progn
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
636 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
637 (let* ((char (following-char))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
638 (chars (cond ((or (= char ?B) (= char ?b)) "01")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
639 ((or (= char ?D) (= char ?d)) "0-9")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
640 ((or (= char ?X) (= char ?x)) "0-9A-Fa-f")
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
641 (t (error "Invalid terminal value")))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
642 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
643 (or (> (skip-chars-forward chars ebnf-limit) 0)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
644 (error "Invalid terminal value"))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
645 (if (= (following-char) ?-)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
646 (progn
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
647 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
648 (or (> (skip-chars-forward chars ebnf-limit) 0)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
649 (error "Invalid terminal value range")))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
650 (while (= (following-char) ?.)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
651 (forward-char)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
652 (or (> (skip-chars-forward chars ebnf-limit) 0)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
653 (error "Invalid terminal value")))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
654 (point))))
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
655
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
656
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
657 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
658
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
659
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
660 (provide 'ebnf-abn)
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
661
54141
8e0088433ac7 Resolve CVS conflicts
Miles Bader <miles@gnu.org>
parents: 54139
diff changeset
662 ;;; arch-tag: 8d1b3c4d-4226-4393-b9ae-b7ccf07cf779
54139
3aff710a91c0 ABNF parser (ebnf2ps)
Vinicius Jose Latorre <viniciusjl@ig.com.br>
parents:
diff changeset
663 ;;; ebnf-abn.el ends here