annotate lisp/progmodes/ebnf-abn.el @ 112414:4b27e6d58d2c

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