$ // This file is part of NIT ( http://www.nitlanguage.org ). $ // $ // Copyright 2008 Jean Privat $ // Based on algorithms developped for ( http://www.sablecc.org/ ). $ // $ // Licensed under the Apache License, Version 2.0 (the "License"); $ // you may not use this file except in compliance with the License. $ // You may obtain a copy of the License at $ // $ // http://www.apache.org/licenses/LICENSE-2.0 $ // $ // Unless required by applicable law or agreed to in writing, software $ // distributed under the License is distributed on an "AS IS" BASIS, $ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. $ // See the License for the specific language governing permissions and $ // limitations under the License. $ template make_abs_tokens() $ foreach {//token} $ if {@parser_index} class @ename super Token end $ end $ end class EOF super Token end class PError super EOF end class PLexerError super PError end class PParserError super PError end $ end template $ template make_tokens() redef class Token var _text: nullable String redef fun text do var res = _text if res != null then return res res = location.text _text = res return res end redef fun text=(text) do _text = text end fun parser_index: Int is abstract end $ foreach {//token} $ if {@parser_index} redef class @ename redef fun parser_index: Int do return @parser_index end init init_tk(loc: Location) do _location = loc end end $ end if $ end foreach redef class EOF redef fun parser_index: Int do return ${tokens/eof/@parser_index} end init init_tk(loc: Location) do _text = "" _location = loc end end redef class PError readable var _message: String init init_error(message: String, loc: Location) do init_tk(loc) _message = message end end redef class PLexerError readable var _string: String init init_lexer_error(message: String, loc: Location, string: String) do init_error(message, loc) _string = string end end redef class PParserError readable var _token: Token init init_parser_error(message: String, loc: Location, token: Token) do init_error(message, loc) _token = token end end $ end template