[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