1 /* 2 * [The "BSD license"] 3 * Copyright (c) 2014 Terence Parr 4 * Copyright (c) 2014 Sam Harwell 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. The name of the author may not be used to endorse or promote products 17 * derived from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 module antlr.v4.runtime.atn.DecisionEventInfo; 32 33 import antlr.v4.runtime.atn.ATNConfigSet; 34 import antlr.v4.runtime.TokenStream; 35 36 /** 37 * This is the base class for gathering detailed information about prediction 38 * events which occur during parsing. 39 * 40 * Note that we could record the parser call stack at the time this event 41 * occurred but in the presence of left recursive rules, the stack is kind of 42 * meaningless. It's better to look at the individual configurations for their 43 * individual stacks. Of course that is a {@link PredictionContext} object 44 * not a parse tree node and so it does not have information about the extent 45 * (start...stop) of the various subtrees. Examining the stack tops of all 46 * configurations provide the return states for the rule invocations. 47 * From there you can get the enclosing rule. 48 */ 49 class DecisionEventInfo 50 { 51 52 /** 53 * The invoked decision number which this event is related to. 54 * 55 * @see ATN#decisionToState 56 */ 57 public int decision; 58 59 /** 60 * The configuration set containing additional information relevant to the 61 * prediction state when the current event occurred, or {@code null} if no 62 * additional information is relevant or available. 63 */ 64 public ATNConfigSet configs; 65 66 /** 67 * The input token stream which is being parsed. 68 */ 69 public TokenStream input; 70 71 public size_t startIndex; 72 73 public size_t stopIndex; 74 75 /** 76 * {@code true} if the current event occurred during LL prediction; 77 * otherwise, {@code false} if the input occurred during SLL prediction. 78 */ 79 public bool fullCtx; 80 81 public this(int decision, ATNConfigSet configs, TokenStream input, size_t startIndex, size_t stopIndex, 82 bool fullCtx) 83 { 84 this.decision = decision; 85 this.fullCtx = fullCtx; 86 this.stopIndex = stopIndex; 87 this.input = input; 88 this.startIndex = startIndex; 89 this.configs = configs; 90 } 91 92 }