[seam-commits] Seam SVN: r13266 - in sandbox/encore: src/main and 11 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Sat Jun 19 17:00:15 EDT 2010


Author: lincolnthree
Date: 2010-06-19 17:00:15 -0400 (Sat, 19 Jun 2010)
New Revision: 13266

Added:
   sandbox/encore/src/main/antlr3/
   sandbox/encore/src/main/antlr3/org/
   sandbox/encore/src/main/antlr3/org/jboss/
   sandbox/encore/src/main/antlr3/org/jboss/seam/
   sandbox/encore/src/main/antlr3/org/jboss/seam/encore/
   sandbox/encore/src/main/antlr3/org/jboss/seam/encore/grammar/
   sandbox/encore/src/main/antlr3/org/jboss/seam/encore/grammar/java/
   sandbox/encore/src/main/antlr3/org/jboss/seam/encore/grammar/java/Java.g
   sandbox/encore/src/main/java/org/jboss/encore/grammar/
   sandbox/encore/src/main/java/org/jboss/encore/grammar/java/
   sandbox/encore/src/main/java/org/jboss/encore/grammar/java/Parser.java
   sandbox/encore/src/main/java/org/jboss/encore/model/java/
Modified:
   sandbox/encore/pom.xml
Log:
Java grammar successfully compiles and can be navigated via AST

Modified: sandbox/encore/pom.xml
===================================================================
--- sandbox/encore/pom.xml	2010-06-19 18:02:20 UTC (rev 13265)
+++ sandbox/encore/pom.xml	2010-06-19 21:00:15 UTC (rev 13266)
@@ -6,7 +6,8 @@
 	<version>1.0.0-SNAPSHOT</version>
 	<packaging>maven-plugin</packaging>
 	<name>Seam Encore</name>
-	<description>Simplified project bootstrapping and incremental enhancement framework	</description>
+	<description>Simplified project bootstrapping and incremental
+		enhancement framework	</description>
 
 	<dependencies>
 		<dependency>
@@ -21,6 +22,13 @@
 		</dependency>
 
 		<dependency>
+			<groupId>org.antlr</groupId>
+			<artifactId>antlr</artifactId>
+			<version>3.2</version>
+		</dependency>
+
+
+		<dependency>
 			<groupId>org.apache.maven</groupId>
 			<artifactId>maven-model</artifactId>
 			<version>3.0-beta-1</version>
@@ -33,4 +41,28 @@
 		</dependency>
 	</dependencies>
 
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.antlr</groupId>
+				<artifactId>antlr3-maven-plugin</artifactId>
+				<version>3.2</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>antlr</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>1.5</source>
+					<target>1.5</target>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
 </project>
\ No newline at end of file

Added: sandbox/encore/src/main/antlr3/org/jboss/seam/encore/grammar/java/Java.g
===================================================================
--- sandbox/encore/src/main/antlr3/org/jboss/seam/encore/grammar/java/Java.g	                        (rev 0)
+++ sandbox/encore/src/main/antlr3/org/jboss/seam/encore/grammar/java/Java.g	2010-06-19 21:00:15 UTC (rev 13266)
@@ -0,0 +1,2227 @@
+grammar Java;
+
+options {
+    backtrack=true;
+    memoize=true;
+    output=AST;
+}
+
+ at parser::header {package org.jboss.seam.encore.grammar.java;}
+ at lexer::header {package org.jboss.seam.encore.grammar.java;}
+
+/********************************************************************************************
+                          Parser section
+*********************************************************************************************/
+
+compilationUnit 
+    :   (   (annotations
+            )?
+            packageDeclaration
+        )?
+        (importDeclaration
+        )*
+        (typeDeclaration
+        )*
+    ;
+
+packageDeclaration 
+    :   'package' qualifiedName
+        ';'
+    ;
+
+importDeclaration  
+    :   'import' 
+        ('static'
+        )?
+        IDENTIFIER '.' '*'
+        ';'       
+    |   'import' 
+        ('static'
+        )?
+        IDENTIFIER
+        ('.' IDENTIFIER
+        )+
+        ('.' '*'
+        )?
+        ';'
+    ;
+
+qualifiedImportName 
+    :   IDENTIFIER
+        ('.' IDENTIFIER
+        )*
+    ;
+
+typeDeclaration 
+    :   classOrInterfaceDeclaration
+    |   ';'
+    ;
+
+classOrInterfaceDeclaration 
+    :    classDeclaration
+    |   interfaceDeclaration
+    ;
+    
+  
+modifiers  
+    :
+    (    annotation
+    |   'public'
+    |   'protected'
+    |   'private'
+    |   'static'
+    |   'abstract'
+    |   'final'
+    |   'native'
+    |   'synchronized'
+    |   'transient'
+    |   'volatile'
+    |   'strictfp'
+    )*
+    ;
+
+
+variableModifiers 
+    :   (   'final'
+        |   annotation
+        )*
+    ;
+    
+
+classDeclaration 
+    :   normalClassDeclaration
+    |   enumDeclaration
+    ;
+
+normalClassDeclaration 
+    :   modifiers  'class' IDENTIFIER
+        (typeParameters
+        )?
+        ('extends' type
+        )?
+        ('implements' typeList
+        )?            
+        classBody
+    ;
+
+
+typeParameters 
+    :   '<'
+            typeParameter
+            (',' typeParameter
+            )*
+        '>'
+    ;
+
+typeParameter 
+    :   IDENTIFIER
+        ('extends' typeBound
+        )?
+    ;
+
+
+typeBound 
+    :   type
+        ('&' type
+        )*
+    ;
+
+
+enumDeclaration 
+    :   modifiers 
+        ('enum'
+        ) 
+        IDENTIFIER
+        ('implements' typeList
+        )?
+        enumBody
+    ;
+    
+
+enumBody 
+    :   '{'
+        (enumConstants
+        )? 
+        ','? 
+        (enumBodyDeclarations
+        )? 
+        '}'
+    ;
+
+enumConstants 
+    :   enumConstant
+        (',' enumConstant
+        )*
+    ;
+
+/**
+ * NOTE: here differs from the javac grammar, missing TypeArguments.
+ * EnumeratorDeclaration = AnnotationsOpt [TypeArguments] IDENTIFIER [ Arguments ] [ "{" ClassBody "}" ]
+ */
+enumConstant 
+    :   (annotations
+        )?
+        IDENTIFIER
+        (arguments
+        )?
+        (classBody
+        )?
+        /* TODO: $GScope::name = names.empty. enum constant body is actually
+        an anonymous class, where constructor isn't allowed, have to add this check*/
+    ;
+
+enumBodyDeclarations 
+    :   ';' 
+        (classBodyDeclaration
+        )*
+    ;
+
+interfaceDeclaration 
+    :   normalInterfaceDeclaration
+    |   annotationTypeDeclaration
+    ;
+    
+normalInterfaceDeclaration 
+    :   modifiers 'interface' IDENTIFIER
+        (typeParameters
+        )?
+        ('extends' typeList
+        )?
+        interfaceBody
+    ;
+
+typeList 
+    :   type
+        (',' type
+        )*
+    ;
+
+classBody 
+    :   '{' 
+        (classBodyDeclaration
+        )* 
+        '}'
+    ;
+
+interfaceBody 
+    :   '{' 
+        (interfaceBodyDeclaration
+        )* 
+        '}'
+    ;
+
+classBodyDeclaration 
+    :   ';'
+    |   ('static'
+        )? 
+        block
+    |   memberDecl
+    ;
+
+memberDecl 
+    :    fieldDeclaration
+    |    methodDeclaration
+    |    classDeclaration
+    |    interfaceDeclaration
+    ;
+
+
+methodDeclaration 
+    :
+        /* For constructor, return type is null, name is 'init' */
+         modifiers
+        (typeParameters
+        )?
+        IDENTIFIER
+        formalParameters
+        ('throws' qualifiedNameList
+        )?
+        '{' 
+        (explicitConstructorInvocation
+        )?
+        (blockStatement
+        )*
+        '}'
+    |   modifiers
+        (typeParameters
+        )?
+        (type
+        |   'void'
+        )
+        IDENTIFIER
+        formalParameters
+        ('[' ']'
+        )*
+        ('throws' qualifiedNameList
+        )?            
+        (        
+            block
+        |   ';' 
+        )
+    ;
+
+
+fieldDeclaration 
+    :   modifiers
+        type
+        variableDeclarator
+        (',' variableDeclarator
+        )*
+        ';'
+    ;
+
+variableDeclarator 
+    :   IDENTIFIER
+        ('[' ']'
+        )*
+        ('=' variableInitializer
+        )?
+    ;
+
+/**
+ *TODO: add predicates
+ */
+interfaceBodyDeclaration 
+    :
+        interfaceFieldDeclaration
+    |   interfaceMethodDeclaration
+    |   interfaceDeclaration
+    |   classDeclaration
+    |   ';'
+    ;
+
+interfaceMethodDeclaration 
+    :   modifiers
+        (typeParameters
+        )?
+        (type
+        |'void'
+        )
+        IDENTIFIER
+        formalParameters
+        ('[' ']'
+        )*
+        ('throws' qualifiedNameList
+        )? ';'
+    ;
+
+/**
+ * NOTE, should not use variableDeclarator here, as it doesn't necessary require
+ * an initializer, while an interface field does, or judge by the returned value.
+ * But this gives better diagnostic message, or antlr won't predict this rule.
+ */
+interfaceFieldDeclaration 
+    :   modifiers type variableDeclarator
+        (',' variableDeclarator
+        )*
+        ';'
+    ;
+
+
+type 
+    :   classOrInterfaceType
+        ('[' ']'
+        )*
+    |   primitiveType
+        ('[' ']'
+        )*
+    ;
+
+
+classOrInterfaceType 
+    :   IDENTIFIER
+        (typeArguments
+        )?
+        ('.' IDENTIFIER
+            (typeArguments
+            )?
+        )*
+    ;
+
+primitiveType  
+    :   'boolean'
+    |   'char'
+    |   'byte'
+    |   'short'
+    |   'int'
+    |   'long'
+    |   'float'
+    |   'double'
+    ;
+
+typeArguments 
+    :   '<' typeArgument
+        (',' typeArgument
+        )* 
+        '>'
+    ;
+
+typeArgument 
+    :   type
+    |   '?'
+        (
+            ('extends'
+            |'super'
+            )
+            type
+        )?
+    ;
+
+qualifiedNameList 
+    :   qualifiedName
+        (',' qualifiedName
+        )*
+    ;
+
+formalParameters 
+    :   '('
+        (formalParameterDecls
+        )? 
+        ')'
+    ;
+
+formalParameterDecls 
+    :   ellipsisParameterDecl
+    |   normalParameterDecl
+        (',' normalParameterDecl
+        )*
+    |   (normalParameterDecl
+        ','
+        )+ 
+        ellipsisParameterDecl
+    ;
+
+normalParameterDecl 
+    :   variableModifiers type IDENTIFIER
+        ('[' ']'
+        )*
+    ;
+
+ellipsisParameterDecl 
+    :   variableModifiers
+        type  '...'
+        IDENTIFIER
+    ;
+
+
+explicitConstructorInvocation 
+    :   (nonWildcardTypeArguments
+        )?     //NOTE: the position of Identifier 'super' is set to the type args position here
+        ('this'
+        |'super'
+        )
+        arguments ';'
+
+    |   primary
+        '.'
+        (nonWildcardTypeArguments
+        )?
+        'super'
+        arguments ';'
+    ;
+
+qualifiedName 
+    :   IDENTIFIER
+        ('.' IDENTIFIER
+        )*
+    ;
+
+annotations 
+    :   (annotation
+        )+
+    ;
+
+/**
+ *  Using an annotation. 
+ * '@' is flaged in modifier
+ */
+annotation 
+    :   '@' qualifiedName
+        (   '('   
+                  (   elementValuePairs
+                  |   elementValue
+                  )? 
+            ')' 
+        )?
+    ;
+
+elementValuePairs 
+    :   elementValuePair
+        (',' elementValuePair
+        )*
+    ;
+
+elementValuePair 
+    :   IDENTIFIER '=' elementValue
+    ;
+
+elementValue 
+    :   conditionalExpression
+    |   annotation
+    |   elementValueArrayInitializer
+    ;
+
+elementValueArrayInitializer 
+    :   '{'
+        (elementValue
+            (',' elementValue
+            )*
+        )? (',')? '}'
+    ;
+
+
+/**
+ * Annotation declaration.
+ */
+annotationTypeDeclaration 
+    :   modifiers '@'
+        'interface'
+        IDENTIFIER
+        annotationTypeBody
+    ;
+
+
+annotationTypeBody 
+    :   '{' 
+        (annotationTypeElementDeclaration
+        )* 
+        '}'
+    ;
+
+/**
+ * NOTE: here use interfaceFieldDeclaration for field declared inside annotation. they are sytactically the same.
+ */
+annotationTypeElementDeclaration 
+    :   annotationMethodDeclaration
+    |   interfaceFieldDeclaration
+    |   normalClassDeclaration
+    |   normalInterfaceDeclaration
+    |   enumDeclaration
+    |   annotationTypeDeclaration
+    |   ';'
+    ;
+
+annotationMethodDeclaration 
+    :   modifiers type IDENTIFIER
+        '(' ')' ('default' elementValue
+                )?
+        ';'
+        ;
+
+block 
+    :   '{'
+        (blockStatement
+        )*
+        '}'
+    ;
+
+/*
+staticBlock returns [JCBlock tree]
+        @init {
+            ListBuffer<JCStatement> stats = new ListBuffer<JCStatement>();
+            int pos = ((AntlrJavacToken) $start).getStartIndex();
+        }
+        @after {
+            $tree = T.at(pos).Block(Flags.STATIC, stats.toList());
+            pu.storeEnd($tree, $stop);
+            // construct a dummy static modifiers for end position
+            pu.storeEnd(T.at(pos).Modifiers(Flags.STATIC,  com.sun.tools.javac.util.List.<JCAnnotation>nil()),$st);
+        }
+    :   st_1='static' '{' 
+        (blockStatement
+            {
+                if ($blockStatement.tree == null) {
+                    stats.appendList($blockStatement.list);
+                } else {
+                    stats.append($blockStatement.tree);
+                }
+            }
+        )* '}'
+    ;
+*/
+blockStatement 
+    :   localVariableDeclarationStatement
+    |   classOrInterfaceDeclaration
+    |   statement
+    ;
+
+
+localVariableDeclarationStatement 
+    :   localVariableDeclaration
+        ';'
+    ;
+
+localVariableDeclaration 
+    :   variableModifiers type
+        variableDeclarator
+        (',' variableDeclarator
+        )*
+    ;
+
+statement 
+    :   block
+            
+    |   ('assert'
+        )
+        expression (':' expression)? ';'
+    |   'assert'  expression (':' expression)? ';'            
+    |   'if' parExpression statement ('else' statement)?          
+    |   forstatement
+    |   'while' parExpression statement
+    |   'do' statement 'while' parExpression ';'
+    |   trystatement
+    |   'switch' parExpression '{' switchBlockStatementGroups '}'
+    |   'synchronized' parExpression block
+    |   'return' (expression )? ';'
+    |   'throw' expression ';'
+    |   'break'
+            (IDENTIFIER
+            )? ';'
+    |   'continue'
+            (IDENTIFIER
+            )? ';'
+    |   expression  ';'     
+    |   IDENTIFIER ':' statement
+    |   ';'
+
+    ;
+
+switchBlockStatementGroups 
+    :   (switchBlockStatementGroup )*
+    ;
+
+switchBlockStatementGroup 
+    :
+        switchLabel
+        (blockStatement
+        )*
+    ;
+
+switchLabel 
+    :   'case' expression ':'
+    |   'default' ':'
+    ;
+
+
+trystatement 
+    :   'try' block
+        (   catches 'finally' block
+        |   catches
+        |   'finally' block
+        )
+     ;
+
+catches 
+    :   catchClause
+        (catchClause
+        )*
+    ;
+
+catchClause 
+    :   'catch' '(' formalParameter
+        ')' block 
+    ;
+
+formalParameter 
+    :   variableModifiers type IDENTIFIER
+        ('[' ']'
+        )*
+    ;
+
+forstatement 
+    :   
+        // enhanced for loop
+        'for' '(' variableModifiers type IDENTIFIER ':' 
+        expression ')' statement
+            
+        // normal for loop
+    |   'for' '(' 
+                (forInit
+                )? ';' 
+                (expression
+                )? ';' 
+                (expressionList
+                )? ')' statement
+    ;
+
+forInit 
+    :   localVariableDeclaration
+    |   expressionList
+    ;
+
+parExpression 
+    :   '(' expression ')'
+    ;
+
+expressionList 
+    :   expression
+        (',' expression
+        )*
+    ;
+
+
+expression 
+    :   conditionalExpression
+        (assignmentOperator expression
+        )?
+    ;
+
+
+assignmentOperator 
+    :   '='
+    |   '+='
+    |   '-='
+    |   '*='
+    |   '/='
+    |   '&='
+    |   '|='
+    |   '^='
+    |   '%='
+    |    '<' '<' '='
+    |    '>' '>' '>' '='
+    |    '>' '>' '='
+    ;
+
+
+conditionalExpression 
+    :   conditionalOrExpression
+        ('?' expression ':' conditionalExpression
+        )?
+    ;
+
+conditionalOrExpression 
+    :   conditionalAndExpression
+        ('||' conditionalAndExpression
+        )*
+    ;
+
+conditionalAndExpression 
+    :   inclusiveOrExpression
+        ('&&' inclusiveOrExpression
+        )*
+    ;
+
+inclusiveOrExpression 
+    :   exclusiveOrExpression
+        ('|' exclusiveOrExpression
+        )*
+    ;
+
+exclusiveOrExpression 
+    :   andExpression
+        ('^' andExpression
+        )*
+    ;
+
+andExpression 
+    :   equalityExpression
+        ('&' equalityExpression
+        )*
+    ;
+
+equalityExpression 
+    :   instanceOfExpression
+        (   
+            (   '=='
+            |   '!='
+            )
+            instanceOfExpression
+        )*
+    ;
+
+instanceOfExpression 
+    :   relationalExpression
+        ('instanceof' type
+        )?
+    ;
+
+relationalExpression 
+    :   shiftExpression
+        (relationalOp shiftExpression
+        )*
+    ;
+
+relationalOp 
+    :    '<' '='
+    |    '>' '='
+    |   '<'
+    |   '>'
+    ;
+
+shiftExpression 
+    :   additiveExpression
+        (shiftOp additiveExpression
+        )*
+    ;
+
+
+shiftOp 
+    :    '<' '<'
+    |    '>' '>' '>'
+    |    '>' '>'
+    ;
+
+
+additiveExpression 
+    :   multiplicativeExpression
+        (   
+            (   '+'
+            |   '-'
+            )
+            multiplicativeExpression
+         )*
+    ;
+
+multiplicativeExpression 
+    :
+        unaryExpression
+        (   
+            (   '*'
+            |   '/'
+            |   '%'
+            )
+            unaryExpression
+        )*
+    ;
+
+/**
+ * NOTE: for '+' and '-', if the next token is int or long interal, then it's not a unary expression.
+ *       it's a literal with signed value. INTLTERAL AND LONG LITERAL are added here for this.
+ */
+unaryExpression 
+    :   '+'  unaryExpression
+    |   '-' unaryExpression
+    |   '++' unaryExpression
+    |   '--' unaryExpression
+    |   unaryExpressionNotPlusMinus
+    ;
+
+unaryExpressionNotPlusMinus 
+    :   '~' unaryExpression
+    |   '!' unaryExpression
+    |   castExpression
+    |   primary
+        (selector
+        )*
+        (   '++'
+        |   '--'
+        )?
+    ;
+
+castExpression 
+    :   '(' primitiveType ')' unaryExpression
+    |   '(' type ')' unaryExpressionNotPlusMinus
+    ;
+
+/**
+ * have to use scope here, parameter passing isn't well supported in antlr.
+ */
+primary 
+    :   parExpression            
+    |   'this'
+        ('.' IDENTIFIER
+        )*
+        (identifierSuffix
+        )?
+    |   IDENTIFIER
+        ('.' IDENTIFIER
+        )*
+        (identifierSuffix
+        )?
+    |   'super'
+        superSuffix
+    |   literal
+    |   creator
+    |   primitiveType
+        ('[' ']'
+        )*
+        '.' 'class'
+    |   'void' '.' 'class'
+    ;
+    
+
+superSuffix  
+    :   arguments
+    |   '.' (typeArguments
+        )?
+        IDENTIFIER
+        (arguments
+        )?
+    ;
+
+
+identifierSuffix 
+    :   ('[' ']'
+        )+
+        '.' 'class'
+    |   ('[' expression ']'
+        )+
+    |   arguments
+    |   '.' 'class'
+    |   '.' nonWildcardTypeArguments IDENTIFIER arguments
+    |   '.' 'this'
+    |   '.' 'super' arguments
+    |   innerCreator
+    ;
+
+
+selector  
+    :   '.' IDENTIFIER
+        (arguments
+        )?
+    |   '.' 'this'
+    |   '.' 'super'
+        superSuffix
+    |   innerCreator
+    |   '[' expression ']'
+    ;
+
+creator 
+    :   'new' nonWildcardTypeArguments classOrInterfaceType classCreatorRest
+    |   'new' classOrInterfaceType classCreatorRest
+    |   arrayCreator
+    ;
+
+arrayCreator 
+    :   'new' createdName
+        '[' ']'
+        ('[' ']'
+        )*
+        arrayInitializer
+
+    |   'new' createdName
+        '[' expression
+        ']'
+        (   '[' expression
+            ']'
+        )*
+        ('[' ']'
+        )*
+    ;
+
+variableInitializer 
+    :   arrayInitializer
+    |   expression
+    ;
+
+arrayInitializer 
+    :   '{' 
+            (variableInitializer
+                (',' variableInitializer
+                )*
+            )? 
+            (',')? 
+        '}'             //Yang's fix, position change.
+    ;
+
+
+createdName 
+    :   classOrInterfaceType
+    |   primitiveType
+    ;
+
+innerCreator  
+    :   '.' 'new'
+        (nonWildcardTypeArguments
+        )?
+        IDENTIFIER
+        (typeArguments
+        )?
+        classCreatorRest
+    ;
+
+
+classCreatorRest 
+    :   arguments
+        (classBody
+        )?
+    ;
+
+
+nonWildcardTypeArguments 
+    :   '<' typeList
+        '>'
+    ;
+
+arguments 
+    :   '(' (expressionList
+        )? ')'
+    ;
+
+literal 
+    :   INTLITERAL
+    |   LONGLITERAL
+    |   FLOATLITERAL
+    |   DOUBLELITERAL
+    |   CHARLITERAL
+    |   STRINGLITERAL
+    |   TRUE
+    |   FALSE
+    |   NULL
+    ;
+
+/**
+ * These are headers help to make syntatical predicates, not necessary but helps to make grammar faster.
+ */
+ 
+classHeader 
+    :   modifiers 'class' IDENTIFIER
+    ;
+
+enumHeader 
+    :   modifiers ('enum'|IDENTIFIER) IDENTIFIER
+    ;
+
+interfaceHeader 
+    :   modifiers 'interface' IDENTIFIER
+    ;
+
+annotationHeader 
+    :   modifiers '@' 'interface' IDENTIFIER
+    ;
+
+typeHeader 
+    :   modifiers ('class'|'enum'|('@' ? 'interface')) IDENTIFIER
+    ;
+
+methodHeader 
+    :   modifiers typeParameters? (type|'void')? IDENTIFIER '('
+    ;
+
+fieldHeader 
+    :   modifiers type IDENTIFIER ('['']')* ('='|','|';')
+    ;
+
+localVariableHeader 
+    :   variableModifiers type IDENTIFIER ('['']')* ('='|','|';')
+    ;
+
+
+
+
+/********************************************************************************************
+                  Lexer section
+*********************************************************************************************/
+
+LONGLITERAL
+    :   IntegerNumber LongSuffix
+    ;
+
+    
+INTLITERAL
+    :   IntegerNumber 
+    ;
+    
+fragment
+IntegerNumber
+    :   '0' 
+    |   '1'..'9' ('0'..'9')*    
+    |   '0' ('0'..'7')+         
+    |   HexPrefix HexDigit+        
+    ;
+
+fragment
+HexPrefix
+    :   '0x' | '0X'
+    ;
+        
+fragment
+HexDigit
+    :   ('0'..'9'|'a'..'f'|'A'..'F')
+    ;
+
+fragment
+LongSuffix
+    :   'l' | 'L'
+    ;
+
+
+fragment
+NonIntegerNumber
+    :   ('0' .. '9')+ '.' ('0' .. '9')* Exponent?  
+    |   '.' ( '0' .. '9' )+ Exponent?  
+    |   ('0' .. '9')+ Exponent  
+    |   ('0' .. '9')+ 
+    |   
+        HexPrefix (HexDigit )* 
+        (    () 
+        |    ('.' (HexDigit )* ) 
+        ) 
+        ( 'p' | 'P' ) 
+        ( '+' | '-' )? 
+        ( '0' .. '9' )+
+        ;
+        
+fragment 
+Exponent    
+    :   ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ 
+    ;
+    
+fragment 
+FloatSuffix
+    :   'f' | 'F' 
+    ;     
+
+fragment
+DoubleSuffix
+    :   'd' | 'D'
+    ;
+        
+FLOATLITERAL
+    :   NonIntegerNumber FloatSuffix
+    ;
+    
+DOUBLELITERAL
+    :   NonIntegerNumber DoubleSuffix?
+    ;
+
+CHARLITERAL
+    :   '\'' 
+        (   EscapeSequence 
+        |   ~( '\'' | '\\' | '\r' | '\n' )
+        ) 
+        '\''
+    ; 
+
+STRINGLITERAL
+    :   '"' 
+        (   EscapeSequence
+        |   ~( '\\' | '"' | '\r' | '\n' )        
+        )* 
+        '"' 
+    ;
+
+fragment
+EscapeSequence 
+    :   '\\' (
+                 'b' 
+             |   't' 
+             |   'n' 
+             |   'f' 
+             |   'r' 
+             |   '\"' 
+             |   '\'' 
+             |   '\\' 
+             |       
+                 ('0'..'3') ('0'..'7') ('0'..'7')
+             |       
+                 ('0'..'7') ('0'..'7') 
+             |       
+                 ('0'..'7')
+             )          
+;     
+
+WS  
+    :   (
+             ' '
+        |    '\r'
+        |    '\t'
+        |    '\u000C'
+        |    '\n'
+        ) 
+            {
+                skip();
+            }          
+    ;
+    
+COMMENT
+         @init{
+            boolean isJavaDoc = false;
+        }
+    :   '/*'
+            {
+                if((char)input.LA(1) == '*'){
+                    isJavaDoc = true;
+                }
+            }
+        (options {greedy=false;} : . )* 
+        '*/'
+            {
+                if(isJavaDoc==true){
+                    $channel=HIDDEN;
+                }else{
+                    skip();
+                }
+            }
+    ;
+
+LINE_COMMENT
+    :   '//' ~('\n'|'\r')*  ('\r\n' | '\r' | '\n') 
+            {
+                skip();
+            }
+    |   '//' ~('\n'|'\r')*     // a line comment could appear at the end of the file without CR/LF
+            {
+                skip();
+            }
+    ;   
+        
+ABSTRACT
+    :   'abstract'
+    ;
+    
+ASSERT
+    :   'assert'
+    ;
+    
+BOOLEAN
+    :   'boolean'
+    ;
+    
+BREAK
+    :   'break'
+    ;
+    
+BYTE
+    :   'byte'
+    ;
+    
+CASE
+    :   'case'
+    ;
+    
+CATCH
+    :   'catch'
+    ;
+    
+CHAR
+    :   'char'
+    ;
+    
+CLASS
+    :   'class'
+    ;
+    
+CONST
+    :   'const'
+    ;
+
+CONTINUE
+    :   'continue'
+    ;
+
+DEFAULT
+    :   'default'
+    ;
+
+DO
+    :   'do'
+    ;
+
+DOUBLE
+    :   'double'
+    ;
+
+ELSE
+    :   'else'
+    ;
+
+ENUM
+    :   'enum'
+    ;             
+
+EXTENDS
+    :   'extends'
+    ;
+
+FINAL
+    :   'final'
+    ;
+
+FINALLY
+    :   'finally'
+    ;
+
+FLOAT
+    :   'float'
+    ;
+
+FOR
+    :   'for'
+    ;
+
+GOTO
+    :   'goto'
+    ;
+
+IF
+    :   'if'
+    ;
+
+IMPLEMENTS
+    :   'implements'
+    ;
+
+IMPORT
+    :   'import'
+    ;
+
+INSTANCEOF
+    :   'instanceof'
+    ;
+
+INT
+    :   'int'
+    ;
+
+INTERFACE
+    :   'interface'
+    ;
+
+LONG
+    :   'long'
+    ;
+
+NATIVE
+    :   'native'
+    ;
+
+NEW
+    :   'new'
+    ;
+
+PACKAGE
+    :   'package'
+    ;
+
+PRIVATE
+    :   'private'
+    ;
+
+PROTECTED
+    :   'protected'
+    ;
+
+PUBLIC
+    :   'public'
+    ;
+
+RETURN
+    :   'return'
+    ;
+
+SHORT
+    :   'short'
+    ;
+
+STATIC
+    :   'static'
+    ;
+
+STRICTFP
+    :   'strictfp'
+    ;
+
+SUPER
+    :   'super'
+    ;
+
+SWITCH
+    :   'switch'
+    ;
+
+SYNCHRONIZED
+    :   'synchronized'
+    ;
+
+THIS
+    :   'this'
+    ;
+
+THROW
+    :   'throw'
+    ;
+
+THROWS
+    :   'throws'
+    ;
+
+TRANSIENT
+    :   'transient'
+    ;
+
+TRY
+    :   'try'
+    ;
+
+VOID
+    :   'void'
+    ;
+
+VOLATILE
+    :   'volatile'
+    ;
+
+WHILE
+    :   'while'
+    ;
+
+TRUE
+    :   'true'
+    ;
+
+FALSE
+    :   'false'
+    ;
+
+NULL
+    :   'null'
+    ;
+
+LPAREN
+    :   '('
+    ;
+
+RPAREN
+    :   ')'
+    ;
+
+LBRACE
+    :   '{'
+    ;
+
+RBRACE
+    :   '}'
+    ;
+
+LBRACKET
+    :   '['
+    ;
+
+RBRACKET
+    :   ']'
+    ;
+
+SEMI
+    :   ';'
+    ;
+
+COMMA
+    :   ','
+    ;
+
+DOT
+    :   '.'
+    ;
+
+ELLIPSIS
+    :   '...'
+    ;
+
+EQ
+    :   '='
+    ;
+
+BANG
+    :   '!'
+    ;
+
+TILDE
+    :   '~'
+    ;
+
+QUES
+    :   '?'
+    ;
+
+COLON
+    :   ':'
+    ;
+
+EQEQ
+    :   '=='
+    ;
+
+AMPAMP
+    :   '&&'
+    ;
+
+BARBAR
+    :   '||'
+    ;
+
+PLUSPLUS
+    :   '++'
+    ;
+
+SUBSUB
+    :   '--'
+    ;
+
+PLUS
+    :   '+'
+    ;
+
+SUB
+    :   '-'
+    ;
+
+STAR
+    :   '*'
+    ;
+
+SLASH
+    :   '/'
+    ;
+
+AMP
+    :   '&'
+    ;
+
+BAR
+    :   '|'
+    ;
+
+CARET
+    :   '^'
+    ;
+
+PERCENT
+    :   '%'
+    ;
+
+PLUSEQ
+    :   '+='
+    ; 
+    
+SUBEQ
+    :   '-='
+    ;
+
+STAREQ
+    :   '*='
+    ;
+
+SLASHEQ
+    :   '/='
+    ;
+
+AMPEQ
+    :   '&='
+    ;
+
+BAREQ
+    :   '|='
+    ;
+
+CARETEQ
+    :   '^='
+    ;
+
+PERCENTEQ
+    :   '%='
+    ;
+
+MONKEYS_AT
+    :   '@'
+    ;
+
+BANGEQ
+    :   '!='
+    ;
+
+GT
+    :   '>'
+    ;
+
+LT
+    :   '<'
+    ;        
+              
+IDENTIFIER
+    :   IdentifierStart IdentifierPart*
+    ;
+
+fragment
+SurrogateIdentifer 
+    :   ('\ud800'..'\udbff') ('\udc00'..'\udfff') 
+    ;                 
+
+fragment
+IdentifierStart
+    :   '\u0024'
+    |   '\u0041'..'\u005a'
+    |   '\u005f'
+    |   '\u0061'..'\u007a'
+    |   '\u00a2'..'\u00a5'
+    |   '\u00aa'
+    |   '\u00b5'
+    |   '\u00ba'
+    |   '\u00c0'..'\u00d6'
+    |   '\u00d8'..'\u00f6'
+    |   '\u00f8'..'\u0236'
+    |   '\u0250'..'\u02c1'
+    |   '\u02c6'..'\u02d1'
+    |   '\u02e0'..'\u02e4'
+    |   '\u02ee'
+    |   '\u037a'
+    |   '\u0386'
+    |   '\u0388'..'\u038a'
+    |   '\u038c'
+    |   '\u038e'..'\u03a1'
+    |   '\u03a3'..'\u03ce'
+    |   '\u03d0'..'\u03f5'
+    |   '\u03f7'..'\u03fb'
+    |   '\u0400'..'\u0481'
+    |   '\u048a'..'\u04ce'
+    |   '\u04d0'..'\u04f5'
+    |   '\u04f8'..'\u04f9'
+    |   '\u0500'..'\u050f'
+    |   '\u0531'..'\u0556'
+    |   '\u0559'
+    |   '\u0561'..'\u0587'
+    |   '\u05d0'..'\u05ea'
+    |   '\u05f0'..'\u05f2'
+    |   '\u0621'..'\u063a'
+    |   '\u0640'..'\u064a'
+    |   '\u066e'..'\u066f'
+    |   '\u0671'..'\u06d3'
+    |   '\u06d5'
+    |   '\u06e5'..'\u06e6'
+    |   '\u06ee'..'\u06ef'
+    |   '\u06fa'..'\u06fc'
+    |   '\u06ff'
+    |   '\u0710'
+    |   '\u0712'..'\u072f'
+    |   '\u074d'..'\u074f'
+    |   '\u0780'..'\u07a5'
+    |   '\u07b1'
+    |   '\u0904'..'\u0939'
+    |   '\u093d'
+    |   '\u0950'
+    |   '\u0958'..'\u0961'
+    |   '\u0985'..'\u098c'
+    |   '\u098f'..'\u0990'
+    |   '\u0993'..'\u09a8'
+    |   '\u09aa'..'\u09b0'
+    |   '\u09b2'
+    |   '\u09b6'..'\u09b9'
+    |   '\u09bd'
+    |   '\u09dc'..'\u09dd'
+    |   '\u09df'..'\u09e1'
+    |   '\u09f0'..'\u09f3'
+    |   '\u0a05'..'\u0a0a'
+    |   '\u0a0f'..'\u0a10'
+    |   '\u0a13'..'\u0a28'
+    |   '\u0a2a'..'\u0a30'
+    |   '\u0a32'..'\u0a33'
+    |   '\u0a35'..'\u0a36'
+    |   '\u0a38'..'\u0a39'
+    |   '\u0a59'..'\u0a5c'
+    |   '\u0a5e'
+    |   '\u0a72'..'\u0a74'
+    |   '\u0a85'..'\u0a8d'
+    |   '\u0a8f'..'\u0a91'
+    |   '\u0a93'..'\u0aa8'
+    |   '\u0aaa'..'\u0ab0'
+    |   '\u0ab2'..'\u0ab3'
+    |   '\u0ab5'..'\u0ab9'
+    |   '\u0abd'
+    |   '\u0ad0'
+    |   '\u0ae0'..'\u0ae1'
+    |   '\u0af1'
+    |   '\u0b05'..'\u0b0c'
+    |   '\u0b0f'..'\u0b10'
+    |   '\u0b13'..'\u0b28'
+    |   '\u0b2a'..'\u0b30'
+    |   '\u0b32'..'\u0b33'
+    |   '\u0b35'..'\u0b39'
+    |   '\u0b3d'
+    |   '\u0b5c'..'\u0b5d'
+    |   '\u0b5f'..'\u0b61'
+    |   '\u0b71'
+    |   '\u0b83'
+    |   '\u0b85'..'\u0b8a'
+    |   '\u0b8e'..'\u0b90'
+    |   '\u0b92'..'\u0b95'
+    |   '\u0b99'..'\u0b9a'
+    |   '\u0b9c'
+    |   '\u0b9e'..'\u0b9f'
+    |   '\u0ba3'..'\u0ba4'
+    |   '\u0ba8'..'\u0baa'
+    |   '\u0bae'..'\u0bb5'
+    |   '\u0bb7'..'\u0bb9'
+    |   '\u0bf9'
+    |   '\u0c05'..'\u0c0c'
+    |   '\u0c0e'..'\u0c10'
+    |   '\u0c12'..'\u0c28'
+    |   '\u0c2a'..'\u0c33'
+    |   '\u0c35'..'\u0c39'
+    |   '\u0c60'..'\u0c61'
+    |   '\u0c85'..'\u0c8c'
+    |   '\u0c8e'..'\u0c90'
+    |   '\u0c92'..'\u0ca8'
+    |   '\u0caa'..'\u0cb3'
+    |   '\u0cb5'..'\u0cb9'
+    |   '\u0cbd'
+    |   '\u0cde'
+    |   '\u0ce0'..'\u0ce1'
+    |   '\u0d05'..'\u0d0c'
+    |   '\u0d0e'..'\u0d10'
+    |   '\u0d12'..'\u0d28'
+    |   '\u0d2a'..'\u0d39'
+    |   '\u0d60'..'\u0d61'
+    |   '\u0d85'..'\u0d96'
+    |   '\u0d9a'..'\u0db1'
+    |   '\u0db3'..'\u0dbb'
+    |   '\u0dbd'
+    |   '\u0dc0'..'\u0dc6'
+    |   '\u0e01'..'\u0e30'
+    |   '\u0e32'..'\u0e33'
+    |   '\u0e3f'..'\u0e46'
+    |   '\u0e81'..'\u0e82'
+    |   '\u0e84'
+    |   '\u0e87'..'\u0e88'
+    |   '\u0e8a'
+    |   '\u0e8d'
+    |   '\u0e94'..'\u0e97'
+    |   '\u0e99'..'\u0e9f'
+    |   '\u0ea1'..'\u0ea3'
+    |   '\u0ea5'
+    |   '\u0ea7'
+    |   '\u0eaa'..'\u0eab'
+    |   '\u0ead'..'\u0eb0'
+    |   '\u0eb2'..'\u0eb3'
+    |   '\u0ebd'
+    |   '\u0ec0'..'\u0ec4'
+    |   '\u0ec6'
+    |   '\u0edc'..'\u0edd'
+    |   '\u0f00'
+    |   '\u0f40'..'\u0f47'
+    |   '\u0f49'..'\u0f6a'
+    |   '\u0f88'..'\u0f8b'
+    |   '\u1000'..'\u1021'
+    |   '\u1023'..'\u1027'
+    |   '\u1029'..'\u102a'
+    |   '\u1050'..'\u1055'
+    |   '\u10a0'..'\u10c5'
+    |   '\u10d0'..'\u10f8'
+    |   '\u1100'..'\u1159'
+    |   '\u115f'..'\u11a2'
+    |   '\u11a8'..'\u11f9'
+    |   '\u1200'..'\u1206'
+    |   '\u1208'..'\u1246'
+    |   '\u1248'
+    |   '\u124a'..'\u124d'
+    |   '\u1250'..'\u1256'
+    |   '\u1258'
+    |   '\u125a'..'\u125d'
+    |   '\u1260'..'\u1286'
+    |   '\u1288'
+    |   '\u128a'..'\u128d'
+    |   '\u1290'..'\u12ae'
+    |   '\u12b0'
+    |   '\u12b2'..'\u12b5'
+    |   '\u12b8'..'\u12be'
+    |   '\u12c0'
+    |   '\u12c2'..'\u12c5'
+    |   '\u12c8'..'\u12ce'
+    |   '\u12d0'..'\u12d6'
+    |   '\u12d8'..'\u12ee'
+    |   '\u12f0'..'\u130e'
+    |   '\u1310'
+    |   '\u1312'..'\u1315'
+    |   '\u1318'..'\u131e'
+    |   '\u1320'..'\u1346'
+    |   '\u1348'..'\u135a'
+    |   '\u13a0'..'\u13f4'
+    |   '\u1401'..'\u166c'
+    |   '\u166f'..'\u1676'
+    |   '\u1681'..'\u169a'
+    |   '\u16a0'..'\u16ea'
+    |   '\u16ee'..'\u16f0'
+    |   '\u1700'..'\u170c'
+    |   '\u170e'..'\u1711'
+    |   '\u1720'..'\u1731'
+    |   '\u1740'..'\u1751'
+    |   '\u1760'..'\u176c'
+    |   '\u176e'..'\u1770'
+    |   '\u1780'..'\u17b3'
+    |   '\u17d7' 
+    |   '\u17db'..'\u17dc'
+    |   '\u1820'..'\u1877'
+    |   '\u1880'..'\u18a8'
+    |   '\u1900'..'\u191c'
+    |   '\u1950'..'\u196d'
+    |   '\u1970'..'\u1974'
+    |   '\u1d00'..'\u1d6b'
+    |   '\u1e00'..'\u1e9b'
+    |   '\u1ea0'..'\u1ef9'
+    |   '\u1f00'..'\u1f15'
+    |   '\u1f18'..'\u1f1d'
+    |   '\u1f20'..'\u1f45'
+    |   '\u1f48'..'\u1f4d'
+    |   '\u1f50'..'\u1f57'
+    |   '\u1f59'
+    |   '\u1f5b'
+    |   '\u1f5d'
+    |   '\u1f5f'..'\u1f7d'
+    |   '\u1f80'..'\u1fb4'
+    |   '\u1fb6'..'\u1fbc'
+    |   '\u1fbe'
+    |   '\u1fc2'..'\u1fc4'
+    |   '\u1fc6'..'\u1fcc'
+    |   '\u1fd0'..'\u1fd3'
+    |   '\u1fd6'..'\u1fdb'
+    |   '\u1fe0'..'\u1fec'
+    |   '\u1ff2'..'\u1ff4'
+    |   '\u1ff6'..'\u1ffc'
+    |   '\u203f'..'\u2040'
+    |   '\u2054'
+    |   '\u2071'
+    |   '\u207f'
+    |   '\u20a0'..'\u20b1'
+    |   '\u2102'
+    |   '\u2107'
+    |   '\u210a'..'\u2113'
+    |   '\u2115'
+    |   '\u2119'..'\u211d'
+    |   '\u2124'
+    |   '\u2126'
+    |   '\u2128'
+    |   '\u212a'..'\u212d'
+    |   '\u212f'..'\u2131'
+    |   '\u2133'..'\u2139'
+    |   '\u213d'..'\u213f'
+    |   '\u2145'..'\u2149'
+    |   '\u2160'..'\u2183'
+    |   '\u3005'..'\u3007'
+    |   '\u3021'..'\u3029'
+    |   '\u3031'..'\u3035'
+    |   '\u3038'..'\u303c'
+    |   '\u3041'..'\u3096'
+    |   '\u309d'..'\u309f'
+    |   '\u30a1'..'\u30ff'
+    |   '\u3105'..'\u312c'
+    |   '\u3131'..'\u318e'
+    |   '\u31a0'..'\u31b7'
+    |   '\u31f0'..'\u31ff'
+    |   '\u3400'..'\u4db5'
+    |   '\u4e00'..'\u9fa5'
+    |   '\ua000'..'\ua48c'
+    |   '\uac00'..'\ud7a3'
+    |   '\uf900'..'\ufa2d'
+    |   '\ufa30'..'\ufa6a'
+    |   '\ufb00'..'\ufb06'
+    |   '\ufb13'..'\ufb17'
+    |   '\ufb1d'
+    |   '\ufb1f'..'\ufb28'
+    |   '\ufb2a'..'\ufb36'
+    |   '\ufb38'..'\ufb3c'
+    |   '\ufb3e'
+    |   '\ufb40'..'\ufb41'
+    |   '\ufb43'..'\ufb44'
+    |   '\ufb46'..'\ufbb1'
+    |   '\ufbd3'..'\ufd3d'
+    |   '\ufd50'..'\ufd8f'
+    |   '\ufd92'..'\ufdc7'
+    |   '\ufdf0'..'\ufdfc'
+    |   '\ufe33'..'\ufe34'
+    |   '\ufe4d'..'\ufe4f'
+    |   '\ufe69'
+    |   '\ufe70'..'\ufe74'
+    |   '\ufe76'..'\ufefc'
+    |   '\uff04'
+    |   '\uff21'..'\uff3a'
+    |   '\uff3f'
+    |   '\uff41'..'\uff5a'
+    |   '\uff65'..'\uffbe'
+    |   '\uffc2'..'\uffc7'
+    |   '\uffca'..'\uffcf'
+    |   '\uffd2'..'\uffd7'
+    |   '\uffda'..'\uffdc'
+    |   '\uffe0'..'\uffe1'
+    |   '\uffe5'..'\uffe6'
+    |   ('\ud800'..'\udbff') ('\udc00'..'\udfff') 
+    ;                
+                       
+fragment 
+IdentifierPart
+    :   '\u0000'..'\u0008'
+    |   '\u000e'..'\u001b'
+    |   '\u0024'
+    |   '\u0030'..'\u0039'
+    |   '\u0041'..'\u005a'
+    |   '\u005f'
+    |   '\u0061'..'\u007a'
+    |   '\u007f'..'\u009f'
+    |   '\u00a2'..'\u00a5'
+    |   '\u00aa'
+    |   '\u00ad'
+    |   '\u00b5'
+    |   '\u00ba'
+    |   '\u00c0'..'\u00d6'
+    |   '\u00d8'..'\u00f6'
+    |   '\u00f8'..'\u0236'
+    |   '\u0250'..'\u02c1'
+    |   '\u02c6'..'\u02d1'
+    |   '\u02e0'..'\u02e4'
+    |   '\u02ee'
+    |   '\u0300'..'\u0357'
+    |   '\u035d'..'\u036f'
+    |   '\u037a'
+    |   '\u0386'
+    |   '\u0388'..'\u038a'
+    |   '\u038c'
+    |   '\u038e'..'\u03a1'
+    |   '\u03a3'..'\u03ce'
+    |   '\u03d0'..'\u03f5'
+    |   '\u03f7'..'\u03fb'
+    |   '\u0400'..'\u0481'
+    |   '\u0483'..'\u0486'
+    |   '\u048a'..'\u04ce'
+    |   '\u04d0'..'\u04f5'
+    |   '\u04f8'..'\u04f9'
+    |   '\u0500'..'\u050f'
+    |   '\u0531'..'\u0556'
+    |   '\u0559'
+    |   '\u0561'..'\u0587'
+    |   '\u0591'..'\u05a1'
+    |   '\u05a3'..'\u05b9'
+    |   '\u05bb'..'\u05bd'
+    |   '\u05bf'
+    |   '\u05c1'..'\u05c2'
+    |   '\u05c4'
+    |   '\u05d0'..'\u05ea'
+    |   '\u05f0'..'\u05f2'
+    |   '\u0600'..'\u0603'
+    |   '\u0610'..'\u0615'
+    |   '\u0621'..'\u063a'
+    |   '\u0640'..'\u0658'
+    |   '\u0660'..'\u0669'
+    |   '\u066e'..'\u06d3'
+    |   '\u06d5'..'\u06dd'
+    |   '\u06df'..'\u06e8'
+    |   '\u06ea'..'\u06fc'
+    |   '\u06ff'
+    |   '\u070f'..'\u074a'
+    |   '\u074d'..'\u074f'
+    |   '\u0780'..'\u07b1'
+    |   '\u0901'..'\u0939'
+    |   '\u093c'..'\u094d'
+    |   '\u0950'..'\u0954'
+    |   '\u0958'..'\u0963'
+    |   '\u0966'..'\u096f'
+    |   '\u0981'..'\u0983'
+    |   '\u0985'..'\u098c'
+    |   '\u098f'..'\u0990'
+    |   '\u0993'..'\u09a8'
+    |   '\u09aa'..'\u09b0'
+    |   '\u09b2'
+    |   '\u09b6'..'\u09b9'
+    |   '\u09bc'..'\u09c4'
+    |   '\u09c7'..'\u09c8'
+    |   '\u09cb'..'\u09cd'
+    |   '\u09d7'
+    |   '\u09dc'..'\u09dd'
+    |   '\u09df'..'\u09e3'
+    |   '\u09e6'..'\u09f3'
+    |   '\u0a01'..'\u0a03'
+    |   '\u0a05'..'\u0a0a'
+    |   '\u0a0f'..'\u0a10'
+    |   '\u0a13'..'\u0a28'
+    |   '\u0a2a'..'\u0a30'
+    |   '\u0a32'..'\u0a33'
+    |   '\u0a35'..'\u0a36'
+    |   '\u0a38'..'\u0a39'
+    |   '\u0a3c'
+    |   '\u0a3e'..'\u0a42'
+    |   '\u0a47'..'\u0a48'
+    |   '\u0a4b'..'\u0a4d'
+    |   '\u0a59'..'\u0a5c'
+    |   '\u0a5e'
+    |   '\u0a66'..'\u0a74'
+    |   '\u0a81'..'\u0a83'
+    |   '\u0a85'..'\u0a8d'
+    |   '\u0a8f'..'\u0a91'
+    |   '\u0a93'..'\u0aa8'
+    |   '\u0aaa'..'\u0ab0'
+    |   '\u0ab2'..'\u0ab3'
+    |   '\u0ab5'..'\u0ab9'
+    |   '\u0abc'..'\u0ac5'
+    |   '\u0ac7'..'\u0ac9'
+    |   '\u0acb'..'\u0acd'
+    |   '\u0ad0'
+    |   '\u0ae0'..'\u0ae3'
+    |   '\u0ae6'..'\u0aef'
+    |   '\u0af1'
+    |   '\u0b01'..'\u0b03'
+    |   '\u0b05'..'\u0b0c'        
+    |   '\u0b0f'..'\u0b10'
+    |   '\u0b13'..'\u0b28'
+    |   '\u0b2a'..'\u0b30'
+    |   '\u0b32'..'\u0b33'
+    |   '\u0b35'..'\u0b39'
+    |   '\u0b3c'..'\u0b43'
+    |   '\u0b47'..'\u0b48'
+    |   '\u0b4b'..'\u0b4d'
+    |   '\u0b56'..'\u0b57'
+    |   '\u0b5c'..'\u0b5d'
+    |   '\u0b5f'..'\u0b61'
+    |   '\u0b66'..'\u0b6f'
+    |   '\u0b71'
+    |   '\u0b82'..'\u0b83'
+    |   '\u0b85'..'\u0b8a'
+    |   '\u0b8e'..'\u0b90'
+    |   '\u0b92'..'\u0b95'
+    |   '\u0b99'..'\u0b9a'
+    |   '\u0b9c'
+    |   '\u0b9e'..'\u0b9f'
+    |   '\u0ba3'..'\u0ba4'
+    |   '\u0ba8'..'\u0baa'
+    |   '\u0bae'..'\u0bb5'
+    |   '\u0bb7'..'\u0bb9'
+    |   '\u0bbe'..'\u0bc2'
+    |   '\u0bc6'..'\u0bc8'
+    |   '\u0bca'..'\u0bcd'
+    |   '\u0bd7'
+    |   '\u0be7'..'\u0bef'
+    |   '\u0bf9'
+    |   '\u0c01'..'\u0c03'
+    |   '\u0c05'..'\u0c0c'
+    |   '\u0c0e'..'\u0c10'
+    |   '\u0c12'..'\u0c28'
+    |   '\u0c2a'..'\u0c33'
+    |   '\u0c35'..'\u0c39'
+    |   '\u0c3e'..'\u0c44'
+    |   '\u0c46'..'\u0c48'
+    |   '\u0c4a'..'\u0c4d'
+    |   '\u0c55'..'\u0c56'
+    |   '\u0c60'..'\u0c61'
+    |   '\u0c66'..'\u0c6f'        
+    |   '\u0c82'..'\u0c83'
+    |   '\u0c85'..'\u0c8c'
+    |   '\u0c8e'..'\u0c90'
+    |   '\u0c92'..'\u0ca8'
+    |   '\u0caa'..'\u0cb3'
+    |   '\u0cb5'..'\u0cb9'
+    |   '\u0cbc'..'\u0cc4'
+    |   '\u0cc6'..'\u0cc8'
+    |   '\u0cca'..'\u0ccd'
+    |   '\u0cd5'..'\u0cd6'
+    |   '\u0cde'
+    |   '\u0ce0'..'\u0ce1'
+    |   '\u0ce6'..'\u0cef'
+    |   '\u0d02'..'\u0d03'
+    |   '\u0d05'..'\u0d0c'
+    |   '\u0d0e'..'\u0d10'
+    |   '\u0d12'..'\u0d28'
+    |   '\u0d2a'..'\u0d39'
+    |   '\u0d3e'..'\u0d43'
+    |   '\u0d46'..'\u0d48'
+    |   '\u0d4a'..'\u0d4d'
+    |   '\u0d57'
+    |   '\u0d60'..'\u0d61'
+    |   '\u0d66'..'\u0d6f'
+    |   '\u0d82'..'\u0d83'
+    |   '\u0d85'..'\u0d96'
+    |   '\u0d9a'..'\u0db1'
+    |   '\u0db3'..'\u0dbb'
+    |   '\u0dbd'
+    |   '\u0dc0'..'\u0dc6'
+    |   '\u0dca'
+    |   '\u0dcf'..'\u0dd4'
+    |   '\u0dd6'
+    |   '\u0dd8'..'\u0ddf'
+    |   '\u0df2'..'\u0df3'
+    |   '\u0e01'..'\u0e3a'
+    |   '\u0e3f'..'\u0e4e'
+    |   '\u0e50'..'\u0e59'
+    |   '\u0e81'..'\u0e82'
+    |   '\u0e84'
+    |   '\u0e87'..'\u0e88'        
+    |   '\u0e8a'
+    |   '\u0e8d'
+    |   '\u0e94'..'\u0e97'
+    |   '\u0e99'..'\u0e9f'
+    |   '\u0ea1'..'\u0ea3'
+    |   '\u0ea5'
+    |   '\u0ea7'
+    |   '\u0eaa'..'\u0eab'
+    |   '\u0ead'..'\u0eb9'
+    |   '\u0ebb'..'\u0ebd'
+    |   '\u0ec0'..'\u0ec4'
+    |   '\u0ec6'
+    |   '\u0ec8'..'\u0ecd'
+    |   '\u0ed0'..'\u0ed9'
+    |   '\u0edc'..'\u0edd'
+    |   '\u0f00'
+    |   '\u0f18'..'\u0f19'
+    |   '\u0f20'..'\u0f29'
+    |   '\u0f35'
+    |   '\u0f37'
+    |   '\u0f39'
+    |   '\u0f3e'..'\u0f47'
+    |   '\u0f49'..'\u0f6a'
+    |   '\u0f71'..'\u0f84'
+    |   '\u0f86'..'\u0f8b'
+    |   '\u0f90'..'\u0f97'
+    |   '\u0f99'..'\u0fbc'
+    |   '\u0fc6'
+    |   '\u1000'..'\u1021'
+    |   '\u1023'..'\u1027'
+    |   '\u1029'..'\u102a'
+    |   '\u102c'..'\u1032'
+    |   '\u1036'..'\u1039'
+    |   '\u1040'..'\u1049'
+    |   '\u1050'..'\u1059'
+    |   '\u10a0'..'\u10c5'
+    |   '\u10d0'..'\u10f8'
+    |   '\u1100'..'\u1159'
+    |   '\u115f'..'\u11a2'
+    |   '\u11a8'..'\u11f9'
+    |   '\u1200'..'\u1206'        
+    |   '\u1208'..'\u1246'
+    |   '\u1248'
+    |   '\u124a'..'\u124d'
+    |   '\u1250'..'\u1256'
+    |   '\u1258'
+    |   '\u125a'..'\u125d'
+    |   '\u1260'..'\u1286'
+    |   '\u1288'        
+    |   '\u128a'..'\u128d'
+    |   '\u1290'..'\u12ae'
+    |   '\u12b0'
+    |   '\u12b2'..'\u12b5'
+    |   '\u12b8'..'\u12be'
+    |   '\u12c0'
+    |   '\u12c2'..'\u12c5'
+    |   '\u12c8'..'\u12ce'
+    |   '\u12d0'..'\u12d6'
+    |   '\u12d8'..'\u12ee'
+    |   '\u12f0'..'\u130e'
+    |   '\u1310'
+    |   '\u1312'..'\u1315'
+    |   '\u1318'..'\u131e'
+    |   '\u1320'..'\u1346'
+    |   '\u1348'..'\u135a'
+    |   '\u1369'..'\u1371'
+    |   '\u13a0'..'\u13f4'
+    |   '\u1401'..'\u166c'
+    |   '\u166f'..'\u1676'
+    |   '\u1681'..'\u169a'
+    |   '\u16a0'..'\u16ea'
+    |   '\u16ee'..'\u16f0'
+    |   '\u1700'..'\u170c'
+    |   '\u170e'..'\u1714'
+    |   '\u1720'..'\u1734'
+    |   '\u1740'..'\u1753'
+    |   '\u1760'..'\u176c'
+    |   '\u176e'..'\u1770'
+    |   '\u1772'..'\u1773'
+    |   '\u1780'..'\u17d3'
+    |   '\u17d7'
+    |   '\u17db'..'\u17dd'
+    |   '\u17e0'..'\u17e9'
+    |   '\u180b'..'\u180d'
+    |   '\u1810'..'\u1819'
+    |   '\u1820'..'\u1877'
+    |   '\u1880'..'\u18a9'
+    |   '\u1900'..'\u191c'
+    |   '\u1920'..'\u192b'
+    |   '\u1930'..'\u193b'
+    |   '\u1946'..'\u196d'
+    |   '\u1970'..'\u1974'
+    |   '\u1d00'..'\u1d6b'
+    |   '\u1e00'..'\u1e9b'
+    |   '\u1ea0'..'\u1ef9'
+    |   '\u1f00'..'\u1f15'
+    |   '\u1f18'..'\u1f1d'
+    |   '\u1f20'..'\u1f45'
+    |   '\u1f48'..'\u1f4d'
+    |   '\u1f50'..'\u1f57'
+    |   '\u1f59'
+    |   '\u1f5b'
+    |   '\u1f5d'
+    |   '\u1f5f'..'\u1f7d'
+    |   '\u1f80'..'\u1fb4'
+    |   '\u1fb6'..'\u1fbc'        
+    |   '\u1fbe'
+    |   '\u1fc2'..'\u1fc4'
+    |   '\u1fc6'..'\u1fcc'
+    |   '\u1fd0'..'\u1fd3'
+    |   '\u1fd6'..'\u1fdb'
+    |   '\u1fe0'..'\u1fec'
+    |   '\u1ff2'..'\u1ff4'
+    |   '\u1ff6'..'\u1ffc'
+    |   '\u200c'..'\u200f'
+    |   '\u202a'..'\u202e'
+    |   '\u203f'..'\u2040'
+    |   '\u2054'
+    |   '\u2060'..'\u2063'
+    |   '\u206a'..'\u206f'
+    |   '\u2071'
+    |   '\u207f'
+    |   '\u20a0'..'\u20b1'
+    |   '\u20d0'..'\u20dc'
+    |   '\u20e1'
+    |   '\u20e5'..'\u20ea'
+    |   '\u2102'
+    |   '\u2107'
+    |   '\u210a'..'\u2113'
+    |   '\u2115'
+    |   '\u2119'..'\u211d'
+    |   '\u2124'
+    |   '\u2126'
+    |   '\u2128'
+    |   '\u212a'..'\u212d'
+    |   '\u212f'..'\u2131'
+    |   '\u2133'..'\u2139'
+    |   '\u213d'..'\u213f'
+    |   '\u2145'..'\u2149'
+    |   '\u2160'..'\u2183'
+    |   '\u3005'..'\u3007'
+    |   '\u3021'..'\u302f'        
+    |   '\u3031'..'\u3035'
+    |   '\u3038'..'\u303c'
+    |   '\u3041'..'\u3096'
+    |   '\u3099'..'\u309a'
+    |   '\u309d'..'\u309f'
+    |   '\u30a1'..'\u30ff'
+    |   '\u3105'..'\u312c'
+    |   '\u3131'..'\u318e'
+    |   '\u31a0'..'\u31b7'
+    |   '\u31f0'..'\u31ff'
+    |   '\u3400'..'\u4db5'
+    |   '\u4e00'..'\u9fa5'
+    |   '\ua000'..'\ua48c'
+    |   '\uac00'..'\ud7a3'
+    |   '\uf900'..'\ufa2d'
+    |   '\ufa30'..'\ufa6a'
+    |   '\ufb00'..'\ufb06'
+    |   '\ufb13'..'\ufb17'
+    |   '\ufb1d'..'\ufb28'
+    |   '\ufb2a'..'\ufb36'
+    |   '\ufb38'..'\ufb3c'
+    |   '\ufb3e'
+    |   '\ufb40'..'\ufb41'
+    |   '\ufb43'..'\ufb44'
+    |   '\ufb46'..'\ufbb1'
+    |   '\ufbd3'..'\ufd3d'
+    |   '\ufd50'..'\ufd8f'
+    |   '\ufd92'..'\ufdc7'
+    |   '\ufdf0'..'\ufdfc'
+    |   '\ufe00'..'\ufe0f'
+    |   '\ufe20'..'\ufe23'
+    |   '\ufe33'..'\ufe34'
+    |   '\ufe4d'..'\ufe4f'
+    |   '\ufe69'
+    |   '\ufe70'..'\ufe74'
+    |   '\ufe76'..'\ufefc'
+    |   '\ufeff'
+    |   '\uff04'
+    |   '\uff10'..'\uff19'
+    |   '\uff21'..'\uff3a'
+    |   '\uff3f'
+    |   '\uff41'..'\uff5a'
+    |   '\uff65'..'\uffbe'
+    |   '\uffc2'..'\uffc7'
+    |   '\uffca'..'\uffcf'
+    |   '\uffd2'..'\uffd7'
+    |   '\uffda'..'\uffdc'
+    |   '\uffe0'..'\uffe1'
+    |   '\uffe5'..'\uffe6'
+    |   '\ufff9'..'\ufffb' 
+    |   ('\ud800'..'\udbff') ('\udc00'..'\udfff')
+    ;
+

Added: sandbox/encore/src/main/java/org/jboss/encore/grammar/java/Parser.java
===================================================================
--- sandbox/encore/src/main/java/org/jboss/encore/grammar/java/Parser.java	                        (rev 0)
+++ sandbox/encore/src/main/java/org/jboss/encore/grammar/java/Parser.java	2010-06-19 21:00:15 UTC (rev 13266)
@@ -0,0 +1,164 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.encore.grammar.java;
+
+import java.io.File;
+
+import org.antlr.runtime.ANTLRFileStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.TokenRewriteStream;
+import org.antlr.runtime.debug.BlankDebugEventListener;
+import org.antlr.runtime.tree.CommonTree;
+import org.antlr.runtime.tree.CommonTreeAdaptor;
+import org.antlr.runtime.tree.TreeAdaptor;
+import org.jboss.seam.encore.grammar.java.JavaLexer;
+import org.jboss.seam.encore.grammar.java.JavaParser;
+import org.jboss.seam.encore.grammar.java.JavaParser.compilationUnit_return;
+
+/**
+ * @author <a href="mailto:lincolnbaxter at gmail.com>Lincoln Baxter, III</a>
+ * 
+ */
+public class Parser
+{
+   public static long lexerTime = 0;
+   public static boolean profile = false;
+
+   static JavaLexer lexer;
+
+   static final TreeAdaptor adaptor = new CommonTreeAdaptor()
+   {
+      @Override
+      public Object create(final Token payload)
+      {
+         return new CommonTree(payload);
+      }
+   };
+
+   public static void main(final String[] args)
+   {
+      try
+      {
+         long start = System.currentTimeMillis();
+
+         String arg = "/home/lb3/JBoss/encore/src/main/java/org/jboss/encore/grammar/java/Parser.java";
+         System.out.println("Doing file: " + arg);
+         File file = new File(arg);
+         doFile(file); // parse it
+
+         long stop = System.currentTimeMillis();
+
+         System.out.println("finished parsing OK");
+         if (profile)
+         {
+            System.out.println("num decisions " + profiler.numDecisions);
+         }
+      }
+      catch (Exception e)
+      {
+         System.err.println("exception: " + e);
+         e.printStackTrace(System.err); // so we can get stack trace
+      }
+   }
+
+   // This method decides what action to take based on the type of
+   // file we are looking at
+   public static void doFile(final File f) throws Exception
+   {
+      // If this is a directory, walk each file/dir in that directory
+      if (f.isDirectory())
+      {
+         String files[] = f.list();
+         for (String file : files)
+         {
+            doFile(new File(f, file));
+         }
+      }
+
+      // otherwise, if this is a java file, parse it!
+      else if (((f.getName().length() > 5) && f.getName().substring(f.getName().length() - 5).equals(".java")) || f.getName().equals("input"))
+      {
+         System.err.println("parsing " + f.getAbsolutePath());
+         parseFile(f.getAbsolutePath());
+      }
+   }
+
+   static class CountDecisions extends BlankDebugEventListener
+   {
+      public int numDecisions = 0;
+
+      @Override
+      public void enterDecision(final int decisionNumber)
+      {
+         numDecisions++;
+      }
+   }
+
+   static CountDecisions profiler = new CountDecisions();
+
+   // Here's where we do the real work...
+   public static void parseFile(final String f) throws Exception
+   {
+      try
+      {
+         // Create a scanner that reads from the input stream passed to us
+         if (lexer == null)
+         {
+            lexer = new JavaLexer();
+         }
+         lexer.setCharStream(new ANTLRFileStream(f));
+
+         CommonTokenStream tokens = new TokenRewriteStream(lexer);
+         long start = System.currentTimeMillis();
+         tokens.LT(1); // force load
+         long stop = System.currentTimeMillis();
+         lexerTime += stop - start;
+
+         /*
+          * long t1 = System.currentTimeMillis(); tokens.LT(1); long t2 =
+          * System.currentTimeMillis();
+          * System.out.println("lexing time: "+(t2-t1)+"ms");
+          */
+         // System.out.println(tokens);
+
+         // Create a parser that reads from the scanner
+         JavaParser parser = null;
+         parser = new JavaParser(tokens);
+
+         parser.setTreeAdaptor(adaptor);
+
+         // start parsing at the compilationUnit rule
+         compilationUnit_return compilationUnit = parser.compilationUnit();
+
+         System.out.println("out");
+         // System.err.println("finished "+f);
+      }
+      catch (Exception e)
+      {
+         System.err.println("parser exception: " + e);
+         e.printStackTrace(); // so we can get stack trace
+      }
+   }
+
+}



More information about the seam-commits mailing list