1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!/usr/bin/ruby 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# encoding: utf-8 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin LICENSE 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver[The "BSD licence"] 7324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2009-2010 Kyle Yetter 8324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverAll rights reserved. 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverRedistribution and use in source and binary forms, with or without 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodification, are permitted provided that the following conditions 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverare met: 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 1. Redistributions of source code must retain the above copyright 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver notice, this list of conditions and the following disclaimer. 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 2. Redistributions in binary form must reproduce the above copyright 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver notice, this list of conditions and the following disclaimer in the 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver documentation and/or other materials provided with the distribution. 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 3. The name of the author may not be used to endorse or promote products 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver derived from this software without specific prior written permission. 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 22324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# ANTLR3 exception hierarchy 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# - ported from the ANTLR3 Python Runtime library by 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# Kyle Yetter (kcy5b@yahoo.com) 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodule ANTLR3 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# for compatibility with rubinius, which does not implement StopIteration yet 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverunless defined?( StopIteration ) 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver StopIteration = Class.new( StandardError ) 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodule Error 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::BacktrackingFailed 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: BacktrackingFailed 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: all recognizers 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver recognizer is in backtracking mode (i.e. r.state.backtracking > 0) 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver and the decision path the recognizer is currently attempting 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver hit a point of failure 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernotes:: 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver - functions more as an internal signal, simillar to exception 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver classes such as StopIteration and SystemExit 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver - used to inform the recognizer that it needs to rewind 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver the input to the point at which it started the decision 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver and then either try another possible decision path or 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver declare failure 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver - not a subclass of RecognitionError 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass BacktrackingFailed < StandardError; end 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # To avoid English-only error messages and to generally make things 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # as flexible as possible, these exceptions are not created with strings, 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # but rather the information necessary to generate an error. Then 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # the various reporting methods in Parser and Lexer can be overridden 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # to generate a localized error message. For example, MismatchedToken 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # exceptions are built with the expected token type. 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # So, don't expect getMessage() to return anything. 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Note that as of Java 1.4, you can access the stack trace, which means 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # that you can compute the complete trace of rules from the start symbol. 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # This gives you considerable context information with which to generate 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # useful error messages. 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # ANTLR generates code that throws exceptions upon recognition error and 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # also generates code to catch these exceptions in each rule. If you 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # want to quit upon first error, you can turn off the automatic error 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # handling mechanism using rulecatch action, but you still need to 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # override methods mismatch and recoverFromMismatchSet. 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # In general, the recognition exceptions can track where in a grammar a 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # problem occurred and/or what was the expected input. While the parser 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # knows its state (such as current input symbol and line info) that 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # state can change before the exception is reported so current token index 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # is computed and stored at exception time. From this info, you can 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # perhaps print an entire line of input not just a single token, for example. 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # Better to just say the recognizer had a problem and then let the parser 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # figure out a fancy report. 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::RecognitionError 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 98324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverThe base class of the variety of syntax errors that can occur during the 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrecognition process. These errors all typically concern an expectation built in 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverto the recognizer by the rules of a grammar and an input symbol which failed to 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfit the expectation. 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass RecognitionError < StandardError 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver include ANTLR3::Constants 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :input, :index, :line, :column, :symbol, :token, :source_name 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( input = nil ) 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @index = @line = @column = nil 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @approximate_line_info = false 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if @input = input 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @index = input.index 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @source_name = @input.source_name rescue nil 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver case @input 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver when TokenStream 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @token = @symbol = input.look 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line = @symbol.line 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @column = @symbol.column 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver when CharacterStream 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @token = @symbol = input.peek || EOF 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line = @input.line 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @column = @input.column 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver when AST::TreeNodeStream 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @symbol = @input.look 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if @symbol.respond_to?( :line ) and @symbol.respond_to?( :column ) 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line, @column = @symbol.line, @symbol.column 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver extract_from_node_stream( @input ) 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @symbol = @input.look 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if @symbol.respond_to?( :line ) and @symbol.respond_to?( :column ) 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line, @column = @symbol.line, @symbol.column 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elsif @input.respond_to?( :line ) and @input.respond_to?( :column ) 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line, @column = @input.line, @input.column 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( message ) 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def approximate_line_info? 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @approximate_line_info 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def unexpected_type 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver case @input 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver when TokenStream 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @symbol.type 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver when AST::TreeNodeStream 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = @input.adaptor 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return adaptor.type( @symbol ) 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return @symbol 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def location 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if @source_name then "in #@source_name @ line #@line:#@column" 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else "line #@line:#@column" 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver alias inspect message 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprivate 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def extract_from_node_stream( nodes ) 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver adaptor = nodes.adaptor 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver payload = adaptor.token( @symbol ) 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if payload 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @token = payload 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if payload.line <= 0 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver i = -1 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver while prior_node = nodes.look( i ) 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver prior_payload = adaptor.token( prior_node ) 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if prior_payload and prior_payload.line > 0 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line = prior_payload.line 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @column = prior_payload.column 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @approximate_line_info = true 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver break 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver i -= 1 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line = payload.line 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @column = payload.column 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elsif @symbol.is_a?( AST::Tree ) 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @line = @symbol.line 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @column = @symbol.column 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @symbol.is_a?( AST::CommonTree ) and @token = @symbol.token 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type = adaptor.type( @symbol ) 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text = adaptor.text( @symbol ) 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver token_class = @input.token_class rescue CommonToken 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @token = token_class.new 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @token.type = type 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @token.text = text 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @token 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::MismatchedToken 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertype:: MismatchedToken 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: lexers and parsers 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver The recognizer expected to match a symbol <tt>x</tt> at the current input 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver position, but it saw a different symbol <tt>y</tt> instead. 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass MismatchedToken < RecognitionError 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_reader :expecting 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( expecting, input ) 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @expecting = expecting 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( input ) 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: %p %p" % [ self.class, unexpected_type, @expecting.inspect ] 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::UnwantedToken 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 232324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTODO: this does not appear to be used by any code 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass UnwantedToken < MismatchedToken 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def unexpected_token 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return @token 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver exp = @expecting == INVALID_TOKEN_TYPE ? '' : ", expected %p" % @expecting 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver text = @symbol.text rescue nil 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: found=%p%s" % [ self.class, text, exp ] 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::MissingToken 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: MissingToken 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: parsers and tree parsers 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver The recognizer expected to match some symbol, but it sees a different symbol. 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver The symbol it sees is actually what the recognizer expected to match next. 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=== Example 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvergrammar: 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver grammar MissingTokenExample; 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver options { language = Ruby; } 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @members { 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def report_error(e) 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver raise e 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver missing: A B C; 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A: 'a'; 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver B: 'b'; 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver C: 'c'; 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverin ruby: 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver require 'MissingTokenExampleLexer' 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver require 'MissingTokenExampleParser' 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = MissingTokenExample::Lexer.new( "ac" ) # <= notice the missing 'b' 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens = ANTLR3::CommonTokenStream.new( lexer ) 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = MissingTokenExample::Parser.new( tokens ) 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser.missing 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # raises ANTLR3::Error::MissingToken: at "c" 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass MissingToken < MismatchedToken 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :inserted 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( expecting, input, inserted ) 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( expecting, input ) 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @inserted = inserted 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def missing_type 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return @expecting 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if @inserted and @symbol 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: inserted %p at %p" % 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self.class, @inserted, @symbol.text ] 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver msg = self.class.to_s 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver msg << ': at %p' % token.text unless @token.nil? 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return msg 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::MismatchedRange 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: MismatchedRange 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: all recognizers 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A recognizer expected to match an input symbol (either a character value or 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver an integer token type value) that falls into a range of possible values, but 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver instead it saw a symbol that falls outside the expected range. 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass MismatchedRange < RecognitionError 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :min, :max 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( min, max, input ) 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @min = min 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @max = max 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( input ) 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: %p not in %p..%p" % 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self.class, unexpected_type, @min, @max ] 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::MismatchedSet 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: MismatchedSet 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: all recognizers 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A recognizer expects the current input symbol to be a member of a set of 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver possible symbol values, but the current symbol does not match. 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass MismatchedSet < RecognitionError 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :expecting 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( expecting, input ) 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( input ) 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @expecting = expecting 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: %p not in %p" % 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self.class, unexpected_type, @expecting ] 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::MismatchedNotSet 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: MismatchedNotSet 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: all recognizers 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A recognizer expected to match symbol that is not in some set of symbols but 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver failed. 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass MismatchedNotSet < MismatchedSet 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s: %p != %p' % 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self.class, unexpected_type, @expecting ] 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::NoViableAlternative 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: NoViableAlternative 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: all recognizers 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A recognizer must choose between multiple possible recognition paths based 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver upon the current and future input symbols, but it has determined that 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver the input does not suit any of the possible recognition alternatives. 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 387324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIn ANTLR terminology, a rule is composed of one or more _alternatives_, 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverspecifications seperated by <tt>|</tt> characters. An alternative is composed of 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvera series of elements, including _subrules_ -- rule specifications enclosed 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverwithin parentheses. When recognition code enters a rule method (or a subrule 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverblock) that has multiple alternatives, the recognizer must decide which one of 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverthe multiple possible paths to follow by checking a number of future input 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversymbols. Thus, NoViableAlternative errors indicate that the current input does 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernot fit any of the possible paths. 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 396324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIn lexers, this error is often raised by the main +tokens!+ rule, which must 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverchoose between all possible token rules. If raised by +tokens+, it means the 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvercurrent input does not appear to be part of any token specification. 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass NoViableAlternative < RecognitionError 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :grammar_decision_description, :decision_number, :state_number 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( grammar_decision_description, decision_number, state_number, input ) 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @grammar_decision_description = grammar_decision_description 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @decision_number = decision_number 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @state_number = state_number 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( input ) 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s: %p != [%p]' % 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self.class, unexpected_type, @grammar_decision_description ] 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::EarlyExit 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: EarlyExit 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: all recognizers 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver The recognizer is in a <tt>(..)+</tt> subrule, meaning the recognizer must 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver match the body of the subrule one or more times. If it fails to match at least 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver one occurence of the subrule, the recognizer will raise an EarlyExit 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver exception. 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver== Example 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverconsider a grammar like: 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer grammar EarlyExitDemo; 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ... 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ID: 'a'..'z' ('0'..'9')+; 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernow in ruby 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver require 'EarlyExitDemo' 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver input = ANTLR3::StringStream.new( "ab" ) 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = EarlyExitDemo::Lexer.new( input ) 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer.next_token 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # -> raises EarlyExit: line 1:1 required (...)+ loop did not match 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # anything at character "b" 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass EarlyExit < RecognitionError 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :decision_number 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( decision_number, input ) 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @decision_number = decision_number 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( input ) 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "The recognizer did not match anything for a (..)+ loop." 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::FailedPredicate 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: FailedPredicate 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: all recognizers 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A recognizer is in a rule with a predicate action element, and the predicating 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver action code evaluated to a +false+ value. 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass FailedPredicate < RecognitionError 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :input, :rule_name, :predicate_text 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( input, rule_name, predicate_text ) 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @rule_name = rule_name 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @predicate_text = predicate_text 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( input ) 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def inspect 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s(%s, { %s }?)' % [ self.class.name, @rule_name, @predicate_text ] 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "rule #@rule_name failed predicate: { #@predicate_text }?" 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::MismatchedTreeNode 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: MismatchedTreeNode 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: tree parsers 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A tree parser expects to match a tree node containing a specific type of 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver token, but the current tree node's token type does not match. It's essentially 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver the same as MismatchedToken, but used specifically for tree nodes. 495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass MismatchedTreeNode < RecognitionError 499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :expecting, :input 500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( expecting, input ) 501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @expecting = expecting 502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( input ) 503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '%s: %p != %p' % 507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self.class, unexpected_type, @expecting ] 508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::RewriteCardinalityError 512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: RewriteCardinalityError 514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: tree-rewriting parsers and tree parsers 515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver There is an inconsistency between the number of appearances of some symbol 517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver on the left side of a rewrite rule and the number of the same symbol 518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver seen on the right side of a rewrite rule 519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass RewriteCardinalityError < StandardError 523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :element_description 524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( element_description ) 525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @element_description = element_description 526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( message ) 527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def message 530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: %s" % [ self.class, @element_description ] 531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::RewriteEarlyExit 535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: RewriteEarlyExit 537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: tree-rewriting parsers and tree parsers 538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A tree-rewrite rule requires one or more occurence of a symbol, but none 540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver have been seen. 541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass RewriteEarlyExit < RewriteCardinalityError 545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :element_description 546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( element_description = nil ) 547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( element_description ) 548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::RewriteEmptyStream 552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: RewriteEmptyStream 554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: tree-rewriting parsers and tree parsers 555324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 556324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 557324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 558324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass RewriteEmptyStream < RewriteCardinalityError; end 559324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 560324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Error::TreeInconsistency 561324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 562324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvererror:: TreeInconsistency 563324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverused by:: classes that deal with tree structures 564324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroccurs when:: 565324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver A tree node's data is inconsistent with the overall structure to which it 566324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver belongs. 567324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 568324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversituations that result in tree inconsistencies: 569324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 570324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1. A node has a child node with a +@parent+ attribute different than the node. 571324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver2. A node has a child at index +n+, but the child's +@child_index+ value is not 572324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver +n+ 573324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver3. An adaptor encountered a situation where multiple tree nodes have been 574324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver simultaneously requested as a new tree root. 575324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 576324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 577324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 578324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TreeInconsistency < StandardError 579324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def self.failed_index_check!( expected, real ) 580324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver new( 581324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: child indexes don't match -> expected %d found %d" % 582324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self, expected, real ] 583324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 584324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 585324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 586324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def self.failed_parent_check!( expected, real ) 587324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver new( 588324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "%s: parents don't match; expected %p found %p" % 589324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver [ self, expected, real ] 590324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 591324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 592324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 593324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def self.multiple_roots! 594324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver new "%s: attempted to change more than one node to root" % self 595324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 596324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 597324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 598324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodule_function 599324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 600324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef MismatchedToken( expecting, input = @input ) 601324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver MismatchedToken.new( expecting, input ) 602324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 603324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 604324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef UnwantedToken( expecting, input = @input ) 605324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver UnwantedToken.new( expecting, input ) 606324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 607324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 608324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef MissingToken( expecting, inserted, input = @input ) 609324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver MissingToken.new( expecting, input, inserted ) 610324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 611324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 612324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef MismatchedRange( min, max, input = @input ) 613324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver MismatchedRange.new( min, max, input ) 614324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 615324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 616324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef MismatchedSet( expecting, input = @input ) 617324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver MismatchedSet.new( expecting, input ) 618324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 619324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 620324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef MismatchedNotSet( expecting, input = @input ) 621324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver MismatchedNotSet.new( expecting, input ) 622324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 623324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 624324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef NoViableAlternative( description, decision, state, input = @input ) 625324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NoViableAlternative.new( description, decision, state, input ) 626324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 627324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 628324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef EarlyExit( decision, input = @input ) 629324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EarlyExit.new( decision, input ) 630324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 631324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 632324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef FailedPredicate( rule, predicate, input = @input ) 633324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver FailedPredicate.new( input, rule, predicate ) 634324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 635324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 636324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef MismatchedTreeNode( expecting, input = @input ) 637324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver MismatchedTreeNode.new( expecting, input ) 638324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 639324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 640324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef RewriteCardinalityError( element_description ) 641324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver RewriteCardinalityError.new( element_description ) 642324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 643324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 644324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef RewriteEarlyExit( element_description = nil ) 645324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver RewriteEarlyExit.new( element_description ) 646324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 647324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 648324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef RewriteEmptyStream( element_description ) 649324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver RewriteEmptyStream.new( element_description ) 650324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 651324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 652324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 653324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 654324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverinclude Error 655324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 656324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=begin rdoc ANTLR3::Bug 657324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 658324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 659324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 660324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver=end 661324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 662324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass Bug < StandardError 663324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def initialize( message = nil, *args ) 664324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver message = "something occurred that should not occur within unmodified, " << 665324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "ANTLR-generated source code: #{ message }" 666324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver super( message, *args ) 667324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 668324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 669324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 670324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 671