Datei: NDODLL/NDOql/Parser.frame

Last Commit (28c8c45)
1 /*----------------------------------------------------------------------
2 Compiler Generator Coco/R,
3 Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz
4 extended by M. Loeberbauer & A. Woess, Univ. of Linz
5 with improvements by Pat Terry, Rhodes University
6
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
10 later version.
11
12 This program is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE.··See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
21 As an exception, it is allowed to write an extension of Coco/R that is
22 used as a plugin in non-free software.
23
24 If not otherwise stated, any source code generated by Coco/R (other than
25 Coco/R itself) does not fall under the GNU General Public License.
26 ----------------------------------------------------------------------*/
27 -->begin
28 //
29 // This is generated code. Do not change it directly, change the Parser.frame file and rebuild the grammar.
30 //
31
32 using System;
33 #pragma warning disable 3008, 1591
34
35 -->namespace
36
37 public class Parser {
38 -->constants
39 ····const bool T = true;
40 ····const bool x = false;
41 ····const int minErrDist = 2;
42 ····
43 ····public Scanner scanner;
44 ····public Errors··errors;
45
46 ····public Token t;····// last recognized token
47 ····public Token la;·· // lookahead token
48 ····int errDist = minErrDist;
49
50 -->declarations
51
52 ····public Parser(Scanner scanner) {
53 ········this.scanner = scanner;
54 ········errors = new Errors();
55 ····}
56
57 ····void SynErr (int n) {
58 ········if (errDist >= minErrDist) errors.SynErr(la.line, la.col, n);
59 ········errDist = 0;
60 ····}
61
62 ····public void SemErr (string msg) {
63 ········if (errDist >= minErrDist) errors.SemErr(t.line, t.col, msg);
64 ········errDist = 0;
65 ····}
66 ····
67 ····void Get () {
68 ········for (;;) {
69 ············t = la;
70 ············la = scanner.Scan();
71 ············if (la.kind <= maxT) { ++errDist; break; }
72 -->pragmas
73 ············la = t;
74 ········}
75 ····}
76 ····
77 ····void Expect (int n) {
78 ········if (la.kind==n) Get(); else { SynErr(n); }
79 ····}
80 ····
81 ····bool StartOf (int s) {
82 ········return set[s, la.kind];
83 ····}
84 ····
85 ····void ExpectWeak (int n, int follow) {
86 ········if (la.kind == n) Get();
87 ········else {
88 ············SynErr(n);
89 ············while (!StartOf(follow)) Get();
90 ········}
91 ····}
92
93
94 ····bool WeakSeparator(int n, int syFol, int repFol) {
95 ········int kind = la.kind;
96 ········if (kind == n) {Get(); return true;}
97 ········else if (StartOf(repFol)) {return false;}
98 ········else {
99 ············SynErr(n);
100 ············while (!(set[syFol, kind] || set[repFol, kind] || set[0, kind])) {
101 ················Get();
102 ················kind = la.kind;
103 ············}
104 ············return StartOf(syFol);
105 ········}
106 ····}
107
 
 
 
 
108 ····
109 -->productions
110
111 ····public void Parse() {
112 ········la = new Token();
113 ········la.val = "";········
114 ········Get();
115 -->parseRoot
116 ····}
117 ····
118 ····static readonly bool[,] set = {
119 -->initialization
120 ····};
121 } // end Parser
122
123
124 public class Errors {
125 ····public int count = 0;····································// number of errors detected
126 ····public System.IO.TextWriter errorStream = Console.Out;·· // error messages go to this stream
127 ····public string errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text
128
129 ····public virtual void SynErr (int line, int col, int n) {
130 ········string s;
131 ········switch (n) {
132 -->errors
133 ············default: s = "error " + n; break;
134 ········}
135 ········errorStream.WriteLine(errMsgFormat, line, col, s);
136 ········count++;
137 ····}
138
139 ····public virtual void SemErr (int line, int col, string s) {
140 ········errorStream.WriteLine(errMsgFormat, line, col, s);
141 ········count++;
142 ····}
143 ····
144 ····public virtual void SemErr (string s) {
145 ········errorStream.WriteLine(s);
146 ········count++;
147 ····}
148 ····
149 ····public virtual void Warning (int line, int col, string s) {
150 ········errorStream.WriteLine(errMsgFormat, line, col, s);
151 ····}
152 ····
153 ····public virtual void Warning(string s) {
154 ········errorStream.WriteLine(s);
155 ····}
156 } // Errors
157
158
159 public class FatalError: Exception {
160 ····public FatalError(string m): base(m) {}
161 }
162
New Commit (b47b95e)
1 /*----------------------------------------------------------------------
2 Compiler Generator Coco/R,
3 Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz
4 extended by M. Loeberbauer & A. Woess, Univ. of Linz
5 with improvements by Pat Terry, Rhodes University
6
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
10 later version.
11
12 This program is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE.··See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
21 As an exception, it is allowed to write an extension of Coco/R that is
22 used as a plugin in non-free software.
23
24 If not otherwise stated, any source code generated by Coco/R (other than
25 Coco/R itself) does not fall under the GNU General Public License.
26 ----------------------------------------------------------------------*/
27 -->begin
28 //
29 // This is generated code. Do not change it directly, change the Parser.frame file and rebuild the grammar.
30 //
31
32 using System;
33 #pragma warning disable 3008, 1591
34
35 -->namespace
36
37 public class Parser {
38 -->constants
39 ····const bool T = true;
40 ····const bool x = false;
41 ····const int minErrDist = 2;
42 ····
43 ····public Scanner scanner;
44 ····public Errors··errors;
45
46 ····public Token t;····// last recognized token
47 ····public Token la;·· // lookahead token
48 ····int errDist = minErrDist;
49
50 -->declarations
51
52 ····public Parser(Scanner scanner) {
53 ········this.scanner = scanner;
54 ········errors = new Errors();
55 ····}
56
57 ····void SynErr (int n) {
58 ········if (errDist >= minErrDist) errors.SynErr(la.line, la.col, n);
59 ········errDist = 0;
60 ····}
61
62 ····public void SemErr (string msg) {
63 ········if (errDist >= minErrDist) errors.SemErr(t.line, t.col, msg);
64 ········errDist = 0;
65 ····}
66 ····
67 ····void Get () {
68 ········for (;;) {
69 ············t = la;
70 ············la = scanner.Scan();
71 ············if (la.kind <= maxT) { ++errDist; break; }
72 -->pragmas
73 ············la = t;
74 ········}
75 ····}
76 ····
77 ····void Expect (int n) {
78 ········if (la.kind==n) Get(); else { SynErr(n); }
79 ····}
80 ····
81 ····bool StartOf (int s) {
82 ········return set[s, la.kind];
83 ····}
84 ····
85 ····void ExpectWeak (int n, int follow) {
86 ········if (la.kind == n) Get();
87 ········else {
88 ············SynErr(n);
89 ············while (!StartOf(follow)) Get();
90 ········}
91 ····}
92
93
94 ····bool WeakSeparator(int n, int syFol, int repFol) {
95 ········int kind = la.kind;
96 ········if (kind == n) {Get(); return true;}
97 ········else if (StartOf(repFol)) {return false;}
98 ········else {
99 ············SynErr(n);
100 ············while (!(set[syFol, kind] || set[repFol, kind] || set[0, kind])) {
101 ················Get();
102 ················kind = la.kind;
103 ············}
104 ············return StartOf(syFol);
105 ········}
106 ····}
107
108 ····bool IsOidIdentifier(OqlExpression iexp) {
109 ········return ((string)iexp.Value).EndsWith("oid");
110 ····}
111
112 ····
113 -->productions
114
115 ····public void Parse() {
116 ········la = new Token();
117 ········la.val = "";········
118 ········Get();
119 -->parseRoot
120 ····}
121 ····
122 ····static readonly bool[,] set = {
123 -->initialization
124 ····};
125 } // end Parser
126
127
128 public class Errors {
129 ····public int count = 0;····································// number of errors detected
130 ····public System.IO.TextWriter errorStream = Console.Out;·· // error messages go to this stream
131 ····public string errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text
132
133 ····public virtual void SynErr (int line, int col, int n) {
134 ········string s;
135 ········switch (n) {
136 -->errors
137 ············default: s = "error " + n; break;
138 ········}
139 ········errorStream.WriteLine(errMsgFormat, line, col, s);
140 ········count++;
141 ····}
142
143 ····public virtual void SemErr (int line, int col, string s) {
144 ········errorStream.WriteLine(errMsgFormat, line, col, s);
145 ········count++;
146 ····}
147 ····
148 ····public virtual void SemErr (string s) {
149 ········errorStream.WriteLine(s);
150 ········count++;
151 ····}
152 ····
153 ····public virtual void Warning (int line, int col, string s) {
154 ········errorStream.WriteLine(errMsgFormat, line, col, s);
155 ····}
156 ····
157 ····public virtual void Warning(string s) {
158 ········errorStream.WriteLine(s);
159 ····}
160 } // Errors
161
162
163 public class FatalError: Exception {
164 ····public FatalError(string m): base(m) {}
165 }
166