Home | History | Annotate | Download | only in runtime
      1 package org.antlr.runtime {
      2 	
      3 	/** The set of fields needed by an abstract recognizer to recognize input
      4 	 *  and recover from errors etc...  As a separate state object, it can be
      5 	 *  shared among multiple grammars; e.g., when one grammar imports another.
      6 	 *
      7 	 *  These fields are publically visible but the actual state pointer per
      8 	 *  parser is protected.
      9 	 */
     10 	public class RecognizerSharedState {
     11 		/** Track the set of token types that can follow any rule invocation.
     12 		 *  Stack grows upwards.  When it hits the max, it grows 2x in size
     13 		 *  and keeps going.
     14 		 */
     15 		public var following:Array = new Array();
     16 		public var _fsp:int = -1;
     17 	
     18 		/** This is true when we see an error and before having successfully
     19 		 *  matched a token.  Prevents generation of more than one error message
     20 		 *  per error.
     21 		 */
     22 		public var errorRecovery:Boolean = false;
     23 	
     24 		/** The index into the input stream where the last error occurred.
     25 		 * 	This is used to prevent infinite loops where an error is found
     26 		 *  but no token is consumed during recovery...another error is found,
     27 		 *  ad naseum.  This is a failsafe mechanism to guarantee that at least
     28 		 *  one token/tree node is consumed for two errors.
     29 		 */
     30 		public var lastErrorIndex:int = -1;
     31 	
     32 		/** In lieu of a return value, this indicates that a rule or token
     33 		 *  has failed to match.  Reset to false upon valid token match.
     34 		 */
     35 		public var failed:Boolean = false;
     36 
     37         /** Did the recognizer encounter a syntax error?  Track how many. */
     38     	public var syntaxErrors:int = 0;
     39 	
     40 		/** If 0, no backtracking is going on.  Safe to exec actions etc...
     41 		 *  If >0 then it's the level of backtracking.
     42 		 */
     43 		public var backtracking:int = 0;
     44 	
     45 		/** An Array[size num rules] of Arrays that tracks
     46 		 *  the stop token index for each rule.  ruleMemo[ruleIndex] is
     47 		 *  the memoization table for ruleIndex.  For key ruleStartIndex, you
     48 		 *  get back the stop token for associated rule or MEMO_RULE_FAILED.
     49 		 *
     50 		 *  This is only used if rule memoization is on (which it is by default).
     51 		 */
     52 		public var ruleMemo:Array;
     53 	
     54 	
     55 		// LEXER FIELDS (must be in same state object to avoid casting
     56 		//               constantly in generated code and Lexer object) :(
     57 	
     58 	
     59 		/** The goal of all lexer rules/methods is to create a token object.
     60 		 *  This is an instance variable as multiple rules may collaborate to
     61 		 *  create a single token.  nextToken will return this object after
     62 		 *  matching lexer rule(s).  If you subclass to allow multiple token
     63 		 *  emissions, then set this to the last token to be matched or
     64 		 *  something nonnull so that the auto token emit mechanism will not
     65 		 *  emit another token.
     66 		 */
     67 	    public var token:Token;
     68 	
     69 		/** What character index in the stream did the current token start at?
     70 		 *  Needed, for example, to get the text for current token.  Set at
     71 		 *  the start of nextToken.
     72 	 	 */
     73 		public var tokenStartCharIndex:int = -1;
     74 	
     75 		/** The line on which the first character of the token resides */
     76 		public var tokenStartLine:int;
     77 	
     78 		/** The character position of first character within the line */
     79 		public var tokenStartCharPositionInLine:int;
     80 	
     81 		/** The channel number for the current token */
     82 		public var channel:int;
     83 	
     84 		/** The token type for the current token */
     85 		public var type:int;
     86 	
     87 		/** You can set the text for the current token to override what is in
     88 		 *  the input char buffer.  Use setText() or can set this instance var.
     89 	 	 */
     90 		public var text:String;
     91 	}
     92 
     93 }