First NIT release and new clean mercurial repository
[nit.git] / src / parser / xss / tokens.xss
1 /* This file is part of NIT ( http://www.nitlanguage.org ).
2  *
3  * Copyright 2008 Jean Privat <jean@pryen.org>
4  * Based on algorithms developped for ( http://www.sablecc.org/ ).
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 $ template make_abs_tokens()
20 $ foreach {//token}
21 $ if {@parser_index}    
22 class @ename
23 special Token
24 end
25 $ end
26 $ end
27 class EOF 
28 special Token
29 end
30 class PError
31 special EOF
32 end
33 $ end template
34
35 $ template make_tokens()
36
37 redef class Token
38     readable writable attr _text: String 
39     readable attr _filename: String 
40     readable attr _line: Int 
41     readable attr _pos: Int 
42     
43     meth parser_index: Int is abstract
44
45     redef meth to_s: String do
46         return "'{_text}'"
47     end
48 end
49
50 $ foreach {//token}
51 $ if {@parser_index}    
52 redef class @ename
53     redef meth parser_index: Int
54     do
55         return @parser_index
56     end
57
58 $ if {not(@text)}
59     init(text: String, fname: String, line: Int, pos: Int)
60     do
61         _text = text
62 $ else
63     init(fname: String, line: Int, pos: Int)
64     do
65         _text = once "${sablecc:string2escaped_unicode(@text)}"
66 $ end
67         _filename = fname
68         _line = line
69         _pos = pos
70     end
71 end
72
73 $ end if 
74 $ end foreach
75
76 redef class EOF 
77     redef meth parser_index: Int
78     do
79         return ${tokens/eof/@parser_index}
80     end
81     
82     init(fname: String, line: Int, pos: Int)
83     do
84         _filename = fname
85         _text = ""
86         _line = line
87         _pos = pos
88     end
89 end
90
91 redef class PError
92     readable writable attr _message: String 
93     
94     init init_error(fname: String, line: Int, pos: Int, message: String)
95     do
96         init(fname, line, pos)
97         _message = message
98     end
99 end
100
101 $ end template