//===========================================================================
//
// Parsing Expression Grammar for Java 1.6 as a parboiled parser.
// Based on Chapters 3 and 18 of Java Language Specification, Third Edition (JLS)
// at http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html.
//
//---------------------------------------------------------------------------
//
// Copyright (C) 2010 by Mathias Doenitz
// Based on the Mouse 1.3 grammar for Java 1.6, which is
// Copyright (C) 2006, 2009, 2010, 2011 by Roman R Redziejowski (www.romanredz.se).
//
// The author gives unlimited permission to copy and distribute
// this file, with or without modifications, as long as this notice
// is preserved, and any changes are properly documented.
//
// This file 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.
//
//---------------------------------------------------------------------------
//
// Change log
// 2006-12-06 Posted on Internet.
// 2009-04-04 Modified to conform to Mouse syntax:
// Underscore removed from names
// \f in Space replaced by Unicode for FormFeed.
// 2009-07-10 Unused rule THREADSAFE removed.
// 2009-07-10 Copying and distribution conditions relaxed by the author.
// 2010-01-28 Transcribed to parboiled
// 2010-02-01 Fixed problem in rule "FormalParameterDecls"
// 2010-03-29 Fixed problem in "annotation"
// 2010-03-31 Fixed problem in unicode escapes, String literals and line comments
// (Thanks to Reinier Zwitserloot for the finds)
// 2010-07-26 Fixed problem in LocalVariableDeclarationStatement (accept annotations),
// HexFloat (HexSignificant) and AnnotationTypeDeclaration (bug in the JLS!)
// 2010-10-07 Added full support of Unicode Identifiers as set forth in the JLS
// (Thanks for Ville Peurala for the patch)
// 2011-07-23 Transcribed all missing fixes from Romans Mouse grammar (http://www.romanredz.se/papers/Java.1.6.peg)
//
//===========================================================================
package org.parboiled.examples.java;
import org.parboiled.BaseParser;
import org.parboiled.Rule;
import org.parboiled.annotations.*;
@SuppressWarnings({"InfiniteRecursion"})
@BuildParseTree
public class JavaParser extends BaseParser<Object> {
//-------------------------------------------------------------------------
// Compilation Unit
//-------------------------------------------------------------------------
public Rule CompilationUnit() {
return Sequence(
Spacing(),
Optional(PackageDeclaration()),
ZeroOrMore(ImportDeclaration()),
ZeroOrMore(TypeDeclaration()),
EOI
);
}
Rule PackageDeclaration() {
return Sequence(ZeroOrMore(Annotation()), Sequence(PACKAGE, QualifiedIdentifier(), SEMI));
}
Rule ImportDeclaration() {
return Sequence(
IMPORT,
Optional(STATIC),
QualifiedIdentifier(),
Optional(DOT, STAR),
SEMI
);
}
Rule TypeDeclaration() {
return FirstOf(
Sequence(
ZeroOrMore(Modifier()),
FirstOf(
ClassDeclaration(),
EnumDeclaration(),
InterfaceDeclaration(),
AnnotationTypeDeclaration()
)
),
SEMI
);
}
//-------------------------------------------------------------------------
// Class Declaration
//-------------------------------------------------------------------------
Rule ClassDeclaration() {
return Sequence(
CLASS,
Identifier(),
Optional(TypeParameters()),
Optional(EXTENDS, ClassType()),
Optional(IMPLEMENTS, ClassTypeList()),
ClassBody()
);
}
Rule ClassBody() {
return Sequence(LWING, ZeroOrMore(ClassBodyDeclaration()), RWING);
}
Rule ClassBodyDeclaration() {
return FirstOf(
SEMI,
Sequence(Optional(STATIC), Block()),
Sequence(ZeroOrMore(Modifier()), MemberDecl())
);
}
Rule MemberDecl() {
return FirstOf(
Sequence(TypeParameters(), GenericMethodOrConstructorRest()),
Sequence(Type(), Identifier(), MethodDeclaratorRest()),
Sequence(Type(), VariableDeclarators(), SEMI),
Sequence(VOID, Identifier(), VoidMethodDeclaratorRest()),
Sequence(Identifier(), ConstructorDeclaratorRest()),
InterfaceDeclaration(),
ClassDeclaration(),
EnumDeclaration(),
AnnotationTypeDeclaration()
);
}
Rule GenericMethodOrConstructorRest() {
return FirstOf(
Sequence(FirstOf(Type(), VOID), Identifier(), MethodDeclaratorRest()),
Sequence(Identifier(), ConstructorDeclaratorRest())
);
}
Rule MethodDeclaratorRest() {
return Sequence(
FormalParameters(),
ZeroOrMore(Dim()),
Optional(THROWS, ClassTypeList()),
FirstOf(MethodBody(), SEMI)
);
}
Rule VoidMethodDeclaratorRest() {
return Sequence(
FormalParameters(),
Optional(THROWS, ClassTypeList()),
FirstOf(MethodBody(), SEMI)
);
}
Rule ConstructorDeclaratorRest() {
return Sequence(FormalParameters(), Optional(THROWS, ClassTypeList()), MethodBody());
}
Rule MethodBody() {
return Block();
}
//-------------------------------------------------------------------------
// Interface Declaration
//-------------------------------------------------------------------------
Rule InterfaceDeclaration() {
return Sequence(
INTERFACE,
Identifier(),
Optional(TypeParameters()),
Optional(EXTENDS, ClassTypeList()),
InterfaceBody()
);
}
Rule InterfaceBody() {
return Sequence(LWING, ZeroOrMore(InterfaceBodyDeclaration()), RWING);
}
Rule InterfaceBodyDeclaration() {
return FirstOf(
Sequence(ZeroOrMore(Modifier()), InterfaceMemberDecl()),
SEMI
);
}
Rule InterfaceMemberDecl() {
return FirstOf(
InterfaceMethodOrFieldDecl(),
InterfaceGenericMethodDecl(),
Sequence(VOID, Identifier(), VoidInterfaceMethodDeclaratorsRest()),
InterfaceDeclaration(),
AnnotationTypeDeclaration(),
ClassDeclaration(),
EnumDeclaration()
);
}
Rule InterfaceMethodOrFieldDecl() {
return Sequence(Sequence(Type(), Identifier()), InterfaceMethodOrFieldRest());
}
Rule InterfaceMethodOrFieldRest() {
return FirstOf(
Sequence(ConstantDeclaratorsRest(), SEMI),
InterfaceMethodDeclaratorRest()
);
}
Rule InterfaceMethodDeclaratorRest() {
return Sequence(
FormalParameters(),
ZeroOrMore(Dim()),
Optional(THROWS, ClassTypeList()),
SEMI
);
}
Rule InterfaceGenericMethodDecl() {
return Sequence(TypeParameters(), FirstOf(Type(), VOID), Identifier(), InterfaceMethodDeclaratorRest());
}
Rule VoidInterfaceMethodDeclaratorsRest() {
return Sequence(FormalParameters(), Optional(THROWS, ClassTypeList()), S
没有合适的资源?快使用搜索试试~ 我知道了~
基于java的开发源码-表达式语法解析库 parboiled.zip
共302个文件
java:251个
scala:37个
test:9个
0 下载量 193 浏览量
2024-02-27
21:38:58
上传
评论
收藏 479KB ZIP 举报
温馨提示
基于java的开发源码-表达式语法解析库 parboiled.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于java的开发源码-表达式语法解析库 parboiled.zip (302个子文件)
CHANGELOG 20KB
.gitignore 100B
JavaParser.java 37KB
BaseParser.java 27KB
Base64.java 27KB
RecoveringParseRunner.java 24KB
SparqlParser.java 21KB
ProfilingParseRunner.java 20KB
StringUtils.java 20KB
Preconditions.java 18KB
CachingGenerator.java 15KB
ParseTreeUtils.java 15KB
Utils.java 14KB
AsmUtils.java 14KB
BaseActions.java 14KB
MatcherContext.java 13KB
Predicates.java 12KB
RuleMethod.java 12KB
ParserHierarchyTest.java 12KB
ParserStatistics.java 12KB
FileUtils.java 11KB
InstructionGroupPreparer.java 10KB
SimpleErrorRecoveryTest.java 10KB
IndentDedentInputBuffer.java 9KB
InstructionGroupCreator.java 9KB
Characters.java 9KB
MutableInputBufferTest.java 8KB
Filters.java 8KB
ProxyMatcher.java 8KB
Context.java 8KB
DefaultValueStack.java 8KB
RuleMethodRewriterTest.java 8KB
ActionClassGeneratorTest.java 8KB
ClassNodeInitializer.java 7KB
RuleMethodInterpreter.java 7KB
ProfilingParseRunnerTest.java 7KB
GroupClassGenerator.java 7KB
VarInitClassGeneratorTest.java 7KB
JavaTest2.java 7KB
CachingGeneratorTest.java 7KB
ErrorUtils.java 6KB
IndentDedentInputBufferTest.java 6KB
CalculatorParser3.java 6KB
MemoMismatchesTest.java 6KB
ImmutableList.java 6KB
Main.java 6KB
ValueStack.java 6KB
GraphUtils.java 6KB
ImplicitActionsConverter.java 6KB
FirstOfStringsMatcher.java 6KB
CalculatorsTest.java 6KB
InstructionGroupCreatorTest.java 5KB
TracingParseRunnerTest.java 5KB
CalculatorParser2.java 5KB
ImmutableLinkedList.java 5KB
ActionMatcher.java 5KB
TracingParseRunner.java 5KB
ActionTest.java 5KB
ReturnInstructionUnifierTest.java 5KB
ClassNodeInializerTest.java 5KB
InstructionGraphNode.java 5KB
AsmTestUtils.java 4KB
CachingTest.java 4KB
DefaultInvalidInputErrorFormatter.java 4KB
LabelTest.java 4KB
ReportingParseRunner.java 4KB
Var.java 4KB
ParserTransformer.java 4KB
ImplicitActionsConverterTest.java 4KB
MatcherPath.java 4KB
IndexRange.java 4KB
RuleMethodRewriter.java 4KB
MutableInputBuffer.java 4KB
VarFramingGenerator.java 4KB
DefaultInputBuffer.java 4KB
SparqlTest.java 4KB
JavaTest.java 4KB
MemoMismatchesMatcher.java 4KB
ErrorReportingParseRunner.java 4KB
AbstractMatcher.java 4KB
StringBuilderVar.java 4KB
CalculatorParser1.java 4KB
VarFramingMatcher.java 4KB
FirstOfStringsMatcherTest.java 4KB
VarFramingTest.java 4KB
RecoveryErrorActionsTest.java 4KB
DoWithMatcherVisitor.java 4KB
InputBuffer.java 3KB
CalculatorParser4.java 3KB
AbcTest.java 3KB
ParboiledTest.java 3KB
TestParser.java 3KB
ActionVar2Test.java 3KB
ErrorLocatingParseRunner.java 3KB
AbstractParseRunner.java 3KB
ReportingParseRunnerTest.java 3KB
Matcher.java 3KB
NodeSkippingTest.java 3KB
Types.java 3KB
IntArrayStack.java 3KB
共 302 条
- 1
- 2
- 3
- 4
资源评论
毕业课程设计
- 粉丝: 2247
- 资源: 1639
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功