mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	GrammarKit is a plugin by JetBrains for creating custom language plugins for JetBrains IDEs (such as IntelliJ, RubyMine, CLion and more). It defines a BNF parser language which can be used to generate a parser in Java, and it also integrates JFLex for generating a lexer in Java. Both of these generated Java files can be recognised by a comment on the first line of the file, and so classifying them as generated is trivial.
		
			
				
	
	
		
			483 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			483 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| /* The following code was generated by JFlex 1.4.3 on 28/01/16 11:27 */
 | |
| 
 | |
| package test;
 | |
| import com.intellij.lexer.*;
 | |
| import com.intellij.psi.tree.IElementType;
 | |
| import static org.intellij.grammar.psi.BnfTypes.*;
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * This class is a scanner generated by 
 | |
|  * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
 | |
|  * on 28/01/16 11:27 from the specification file
 | |
|  * <tt>/home/abigail/code/intellij-grammar-kit-test/src/test/_GrammarLexer.flex</tt>
 | |
|  */
 | |
| public class _GrammarLexer implements FlexLexer {
 | |
|   /** initial size of the lookahead buffer */
 | |
|   private static final int ZZ_BUFFERSIZE = 16384;
 | |
| 
 | |
|   /** lexical states */
 | |
|   public static final int YYINITIAL = 0;
 | |
| 
 | |
|   /**
 | |
|    * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
 | |
|    * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
 | |
|    *                  at the beginning of a line
 | |
|    * l is of the form l = 2*k, k a non negative integer
 | |
|    */
 | |
|   private static final int ZZ_LEXSTATE[] = { 
 | |
|      0, 0
 | |
|   };
 | |
| 
 | |
|   /** 
 | |
|    * Translates characters to character classes
 | |
|    */
 | |
|   private static final String ZZ_CMAP_PACKED = 
 | |
|     "\11\0\1\1\1\1\1\0\1\1\1\1\22\0\1\1\101\0\1\13"+
 | |
|     "\1\0\1\3\1\14\1\0\1\10\1\0\1\2\3\0\1\12\1\7"+
 | |
|     "\3\0\1\6\1\4\1\5\1\11\uff8a\0";
 | |
| 
 | |
|   /** 
 | |
|    * Translates characters to character classes
 | |
|    */
 | |
|   private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
 | |
| 
 | |
|   /** 
 | |
|    * Translates DFA states to action switch labels.
 | |
|    */
 | |
|   private static final int [] ZZ_ACTION = zzUnpackAction();
 | |
| 
 | |
|   private static final String ZZ_ACTION_PACKED_0 =
 | |
|     "\1\0\1\1\1\2\3\1\1\3\10\0\1\4\1\5";
 | |
| 
 | |
|   private static int [] zzUnpackAction() {
 | |
|     int [] result = new int[17];
 | |
|     int offset = 0;
 | |
|     offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   private static int zzUnpackAction(String packed, int offset, int [] result) {
 | |
|     int i = 0;       /* index in packed string  */
 | |
|     int j = offset;  /* index in unpacked array */
 | |
|     int l = packed.length();
 | |
|     while (i < l) {
 | |
|       int count = packed.charAt(i++);
 | |
|       int value = packed.charAt(i++);
 | |
|       do result[j++] = value; while (--count > 0);
 | |
|     }
 | |
|     return j;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /** 
 | |
|    * Translates a state to a row index in the transition table
 | |
|    */
 | |
|   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
 | |
| 
 | |
|   private static final String ZZ_ROWMAP_PACKED_0 =
 | |
|     "\0\0\0\15\0\32\0\47\0\64\0\101\0\15\0\116"+
 | |
|     "\0\133\0\150\0\165\0\202\0\217\0\234\0\251\0\15"+
 | |
|     "\0\15";
 | |
| 
 | |
|   private static int [] zzUnpackRowMap() {
 | |
|     int [] result = new int[17];
 | |
|     int offset = 0;
 | |
|     offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   private static int zzUnpackRowMap(String packed, int offset, int [] result) {
 | |
|     int i = 0;  /* index in packed string  */
 | |
|     int j = offset;  /* index in unpacked array */
 | |
|     int l = packed.length();
 | |
|     while (i < l) {
 | |
|       int high = packed.charAt(i++) << 16;
 | |
|       result[j++] = high | packed.charAt(i++);
 | |
|     }
 | |
|     return j;
 | |
|   }
 | |
| 
 | |
|   /** 
 | |
|    * The transition table of the DFA
 | |
|    */
 | |
|   private static final int [] ZZ_TRANS = zzUnpackTrans();
 | |
| 
 | |
|   private static final String ZZ_TRANS_PACKED_0 =
 | |
|     "\1\2\1\3\1\4\1\2\1\5\2\2\1\6\5\2"+
 | |
|     "\16\0\1\3\16\0\1\7\16\0\1\10\20\0\1\11"+
 | |
|     "\11\0\1\12\20\0\1\13\4\0\1\14\25\0\1\15"+
 | |
|     "\10\0\1\16\21\0\1\17\10\0\1\20\12\0\1\21"+
 | |
|     "\6\0";
 | |
| 
 | |
|   private static int [] zzUnpackTrans() {
 | |
|     int [] result = new int[182];
 | |
|     int offset = 0;
 | |
|     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   private static int zzUnpackTrans(String packed, int offset, int [] result) {
 | |
|     int i = 0;       /* index in packed string  */
 | |
|     int j = offset;  /* index in unpacked array */
 | |
|     int l = packed.length();
 | |
|     while (i < l) {
 | |
|       int count = packed.charAt(i++);
 | |
|       int value = packed.charAt(i++);
 | |
|       value--;
 | |
|       do result[j++] = value; while (--count > 0);
 | |
|     }
 | |
|     return j;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /* error codes */
 | |
|   private static final int ZZ_UNKNOWN_ERROR = 0;
 | |
|   private static final int ZZ_NO_MATCH = 1;
 | |
|   private static final int ZZ_PUSHBACK_2BIG = 2;
 | |
|   private static final char[] EMPTY_BUFFER = new char[0];
 | |
|   private static final int YYEOF = -1;
 | |
|   private static java.io.Reader zzReader = null; // Fake
 | |
| 
 | |
|   /* error messages for the codes above */
 | |
|   private static final String ZZ_ERROR_MSG[] = {
 | |
|     "Unkown internal scanner error",
 | |
|     "Error: could not match input",
 | |
|     "Error: pushback value was too large"
 | |
|   };
 | |
| 
 | |
|   /**
 | |
|    * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
 | |
|    */
 | |
|   private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
 | |
| 
 | |
|   private static final String ZZ_ATTRIBUTE_PACKED_0 =
 | |
|     "\1\0\1\11\4\1\1\11\10\0\2\11";
 | |
| 
 | |
|   private static int [] zzUnpackAttribute() {
 | |
|     int [] result = new int[17];
 | |
|     int offset = 0;
 | |
|     offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   private static int zzUnpackAttribute(String packed, int offset, int [] result) {
 | |
|     int i = 0;       /* index in packed string  */
 | |
|     int j = offset;  /* index in unpacked array */
 | |
|     int l = packed.length();
 | |
|     while (i < l) {
 | |
|       int count = packed.charAt(i++);
 | |
|       int value = packed.charAt(i++);
 | |
|       do result[j++] = value; while (--count > 0);
 | |
|     }
 | |
|     return j;
 | |
|   }
 | |
| 
 | |
|   /** the current state of the DFA */
 | |
|   private int zzState;
 | |
| 
 | |
|   /** the current lexical state */
 | |
|   private int zzLexicalState = YYINITIAL;
 | |
| 
 | |
|   /** this buffer contains the current text to be matched and is
 | |
|       the source of the yytext() string */
 | |
|   private CharSequence zzBuffer = "";
 | |
| 
 | |
|   /** this buffer may contains the current text array to be matched when it is cheap to acquire it */
 | |
|   private char[] zzBufferArray;
 | |
| 
 | |
|   /** the textposition at the last accepting state */
 | |
|   private int zzMarkedPos;
 | |
| 
 | |
|   /** the textposition at the last state to be included in yytext */
 | |
|   private int zzPushbackPos;
 | |
| 
 | |
|   /** the current text position in the buffer */
 | |
|   private int zzCurrentPos;
 | |
| 
 | |
|   /** startRead marks the beginning of the yytext() string in the buffer */
 | |
|   private int zzStartRead;
 | |
| 
 | |
|   /** endRead marks the last character in the buffer, that has been read
 | |
|       from input */
 | |
|   private int zzEndRead;
 | |
| 
 | |
|   /**
 | |
|    * zzAtBOL == true <=> the scanner is currently at the beginning of a line
 | |
|    */
 | |
|   private boolean zzAtBOL = true;
 | |
| 
 | |
|   /** zzAtEOF == true <=> the scanner is at the EOF */
 | |
|   private boolean zzAtEOF;
 | |
| 
 | |
|   /* user code: */
 | |
|   public _GrammarLexer() {
 | |
|     this((java.io.Reader)null);
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Creates a new scanner
 | |
|    *
 | |
|    * @param   in  the java.io.Reader to read input from.
 | |
|    */
 | |
|   public _GrammarLexer(java.io.Reader in) {
 | |
|     this.zzReader = in;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /** 
 | |
|    * Unpacks the compressed character translation table.
 | |
|    *
 | |
|    * @param packed   the packed character translation table
 | |
|    * @return         the unpacked character translation table
 | |
|    */
 | |
|   private static char [] zzUnpackCMap(String packed) {
 | |
|     char [] map = new char[0x10000];
 | |
|     int i = 0;  /* index in packed string  */
 | |
|     int j = 0;  /* index in unpacked array */
 | |
|     while (i < 52) {
 | |
|       int  count = packed.charAt(i++);
 | |
|       char value = packed.charAt(i++);
 | |
|       do map[j++] = value; while (--count > 0);
 | |
|     }
 | |
|     return map;
 | |
|   }
 | |
| 
 | |
|   public final int getTokenStart(){
 | |
|     return zzStartRead;
 | |
|   }
 | |
| 
 | |
|   public final int getTokenEnd(){
 | |
|     return getTokenStart() + yylength();
 | |
|   }
 | |
| 
 | |
|   public void reset(CharSequence buffer, int start, int end,int initialState){
 | |
|     zzBuffer = buffer;
 | |
|     zzBufferArray = com.intellij.util.text.CharArrayUtil.fromSequenceWithoutCopying(buffer);
 | |
|     zzCurrentPos = zzMarkedPos = zzStartRead = start;
 | |
|     zzPushbackPos = 0;
 | |
|     zzAtEOF  = false;
 | |
|     zzAtBOL = true;
 | |
|     zzEndRead = end;
 | |
|     yybegin(initialState);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Refills the input buffer.
 | |
|    *
 | |
|    * @return      <code>false</code>, iff there was new input.
 | |
|    *
 | |
|    * @exception   java.io.IOException  if any I/O-Error occurs
 | |
|    */
 | |
|   private boolean zzRefill() throws java.io.IOException {
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Returns the current lexical state.
 | |
|    */
 | |
|   public final int yystate() {
 | |
|     return zzLexicalState;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Enters a new lexical state
 | |
|    *
 | |
|    * @param newState the new lexical state
 | |
|    */
 | |
|   public final void yybegin(int newState) {
 | |
|     zzLexicalState = newState;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Returns the text matched by the current regular expression.
 | |
|    */
 | |
|   public final CharSequence yytext() {
 | |
|     return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Returns the character at position <tt>pos</tt> from the
 | |
|    * matched text.
 | |
|    *
 | |
|    * It is equivalent to yytext().charAt(pos), but faster
 | |
|    *
 | |
|    * @param pos the position of the character to fetch.
 | |
|    *            A value from 0 to yylength()-1.
 | |
|    *
 | |
|    * @return the character at position pos
 | |
|    */
 | |
|   public final char yycharat(int pos) {
 | |
|     return zzBufferArray != null ? zzBufferArray[zzStartRead+pos]:zzBuffer.charAt(zzStartRead+pos);
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Returns the length of the matched text region.
 | |
|    */
 | |
|   public final int yylength() {
 | |
|     return zzMarkedPos-zzStartRead;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Reports an error that occured while scanning.
 | |
|    *
 | |
|    * In a wellformed scanner (no or only correct usage of
 | |
|    * yypushback(int) and a match-all fallback rule) this method
 | |
|    * will only be called with things that "Can't Possibly Happen".
 | |
|    * If this method is called, something is seriously wrong
 | |
|    * (e.g. a JFlex bug producing a faulty scanner etc.).
 | |
|    *
 | |
|    * Usual syntax/scanner level error handling should be done
 | |
|    * in error fallback rules.
 | |
|    *
 | |
|    * @param   errorCode  the code of the errormessage to display
 | |
|    */
 | |
|   private void zzScanError(int errorCode) {
 | |
|     String message;
 | |
|     try {
 | |
|       message = ZZ_ERROR_MSG[errorCode];
 | |
|     }
 | |
|     catch (ArrayIndexOutOfBoundsException e) {
 | |
|       message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
 | |
|     }
 | |
| 
 | |
|     throw new Error(message);
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Pushes the specified amount of characters back into the input stream.
 | |
|    *
 | |
|    * They will be read again by then next call of the scanning method
 | |
|    *
 | |
|    * @param number  the number of characters to be read again.
 | |
|    *                This number must not be greater than yylength()!
 | |
|    */
 | |
|   public void yypushback(int number)  {
 | |
|     if ( number > yylength() )
 | |
|       zzScanError(ZZ_PUSHBACK_2BIG);
 | |
| 
 | |
|     zzMarkedPos -= number;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   /**
 | |
|    * Resumes scanning until the next regular expression is matched,
 | |
|    * the end of input is encountered or an I/O-Error occurs.
 | |
|    *
 | |
|    * @return      the next token
 | |
|    * @exception   java.io.IOException  if any I/O-Error occurs
 | |
|    */
 | |
|   public IElementType advance() throws java.io.IOException {
 | |
|     int zzInput;
 | |
|     int zzAction;
 | |
| 
 | |
|     // cached fields:
 | |
|     int zzCurrentPosL;
 | |
|     int zzMarkedPosL;
 | |
|     int zzEndReadL = zzEndRead;
 | |
|     CharSequence zzBufferL = zzBuffer;
 | |
|     char[] zzBufferArrayL = zzBufferArray;
 | |
|     char [] zzCMapL = ZZ_CMAP;
 | |
| 
 | |
|     int [] zzTransL = ZZ_TRANS;
 | |
|     int [] zzRowMapL = ZZ_ROWMAP;
 | |
|     int [] zzAttrL = ZZ_ATTRIBUTE;
 | |
| 
 | |
|     while (true) {
 | |
|       zzMarkedPosL = zzMarkedPos;
 | |
| 
 | |
|       zzAction = -1;
 | |
| 
 | |
|       zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
 | |
| 
 | |
|       zzState = ZZ_LEXSTATE[zzLexicalState];
 | |
| 
 | |
| 
 | |
|       zzForAction: {
 | |
|         while (true) {
 | |
| 
 | |
|           if (zzCurrentPosL < zzEndReadL)
 | |
|             zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
 | |
|           else if (zzAtEOF) {
 | |
|             zzInput = YYEOF;
 | |
|             break zzForAction;
 | |
|           }
 | |
|           else {
 | |
|             // store back cached positions
 | |
|             zzCurrentPos  = zzCurrentPosL;
 | |
|             zzMarkedPos   = zzMarkedPosL;
 | |
|             boolean eof = zzRefill();
 | |
|             // get translated positions and possibly new buffer
 | |
|             zzCurrentPosL  = zzCurrentPos;
 | |
|             zzMarkedPosL   = zzMarkedPos;
 | |
|             zzBufferL      = zzBuffer;
 | |
|             zzEndReadL     = zzEndRead;
 | |
|             if (eof) {
 | |
|               zzInput = YYEOF;
 | |
|               break zzForAction;
 | |
|             }
 | |
|             else {
 | |
|               zzInput = (zzBufferArrayL != null ? zzBufferArrayL[zzCurrentPosL++] : zzBufferL.charAt(zzCurrentPosL++));
 | |
|             }
 | |
|           }
 | |
|           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
 | |
|           if (zzNext == -1) break zzForAction;
 | |
|           zzState = zzNext;
 | |
| 
 | |
|           int zzAttributes = zzAttrL[zzState];
 | |
|           if ( (zzAttributes & 1) == 1 ) {
 | |
|             zzAction = zzState;
 | |
|             zzMarkedPosL = zzCurrentPosL;
 | |
|             if ( (zzAttributes & 8) == 8 ) break zzForAction;
 | |
|           }
 | |
| 
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       // store back cached position
 | |
|       zzMarkedPos = zzMarkedPosL;
 | |
| 
 | |
|       switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
 | |
|         case 1: 
 | |
|           { return com.intellij.psi.TokenType.BAD_CHARACTER;
 | |
|           }
 | |
|         case 6: break;
 | |
|         case 4: 
 | |
|           { return BNF_STRING;
 | |
|           }
 | |
|         case 7: break;
 | |
|         case 5: 
 | |
|           { return BNF_NUMBER;
 | |
|           }
 | |
|         case 8: break;
 | |
|         case 3: 
 | |
|           { return BNF_ID;
 | |
|           }
 | |
|         case 9: break;
 | |
|         case 2: 
 | |
|           { return com.intellij.psi.TokenType.WHITE_SPACE;
 | |
|           }
 | |
|         case 10: break;
 | |
|         default:
 | |
|           if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
 | |
|             zzAtEOF = true;
 | |
|             return null;
 | |
|           }
 | |
|           else {
 | |
|             zzScanError(ZZ_NO_MATCH);
 | |
|           }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
| 
 | |
| }
 |