Initial commit of PetitJava
Name: PetitJava-JanKurs.160
Author: JanKurs
Time: 19-12-2014, 01:00:18.354 PM
UUID: 1cb1b46d-8c68-4751-9720-f0dd742f3e16
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/Make.proto Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,183 @@
+# $Header$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: stx_goodies_petitparser_parsers_java.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# The Makefile as generated by this Make.proto supports the following targets:
+# make - compile all st-files to a classLib
+# make clean - clean all temp files
+# make clobber - clean all
+#
+# This file contains definitions for Unix based platforms.
+# It shares common definitions with the win32-make in Make.spec.
+
+#
+# position (of this package) in directory hierarchy:
+# (must point to ST/X top directory, for tools and includes)
+TOP=../../../..
+INCLUDE_TOP=$(TOP)/..
+
+# subdirectories where targets are to be made:
+SUBDIRS=
+
+
+# subdirectories where Makefiles are to be made:
+# (only define if different from SUBDIRS)
+# ALLSUBDIRS=
+
+REQUIRED_SUPPORT_DIRS=
+
+# if your embedded C code requires any system includes,
+# add the path(es) here:,
+# ********** OPTIONAL: MODIFY the next lines ***
+# LOCALINCLUDES=-Ifoo -Ibar
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/petitparser -I$(INCLUDE_TOP)/stx/goodies/petitparser/tests -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2
+
+
+# if you need any additional defines for embedded C code,
+# add them here:,
+# ********** OPTIONAL: MODIFY the next lines ***
+# LOCALDEFINES=-Dfoo -Dbar -DDEBUG
+LOCALDEFINES=
+
+LIBNAME=libstx_goodies_petitparser_parsers_java
+STCLOCALOPT='-package=$(PACKAGE)' -I. $(LOCALINCLUDES) $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -headerDir=. -varPrefix=$(LIBNAME)
+
+
+# ********** OPTIONAL: MODIFY the next line ***
+# additional C-libraries that should be pre-linked with the class-objects
+LD_OBJ_LIBS=
+LOCAL_SHARED_LIBS=
+
+
+# ********** OPTIONAL: MODIFY the next line ***
+# additional C targets or libraries should be added below
+LOCAL_EXTRA_TARGETS=
+
+OBJS= $(COMMON_OBJS) $(UNIX_OBJS)
+
+
+
+all:: preMake classLibRule postMake
+
+pre_objs::
+
+
+
+
+
+
+# Enforce recompilation of package definition class if Mercurial working
+# copy state changes. Together with --guessVersion it ensures that package
+# definition class always contains correct binary revision string.
+ifneq (**NOHG**, $(shell hg root 2> /dev/null || echo -n '**NOHG**'))
+stx_goodies_petitparser_parsers_java.$(O): $(shell hg root)/.hg/dirstate
+endif
+
+
+
+
+# run default testsuite for this package
+test: $(TOP)/goodies/builder/reports
+ $(MAKE) -C $(TOP)/goodies/builder/reports -f Makefile.init
+ $(TOP)/goodies/builder/reports/report-runner.sh -D . -r Builder::TestReport -p $(PACKAGE)
+
+
+
+# add more install actions here
+install::
+
+# add more install actions for aux-files (resources) here
+installAux::
+
+# add more preMake actions here
+preMake::
+
+# add more postMake actions here
+postMake:: cleanjunk
+
+# build all mandatory prerequisite packages (containing superclasses) for this package
+prereq:
+ cd ../../../../libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../../../../libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../../../../libbasic3 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../../../../libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../../ && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../../../../libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../../../sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+ cd ../../tests && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+
+
+
+# build all packages containing referenced classes for this package
+# they are not needed to compile the package (but later, to load it)
+references:
+
+
+cleanjunk::
+ -rm -f *.s *.s2
+
+clean::
+ -rm -f *.o *.H
+
+clobber:: clean
+ -rm -f *.so *.dll
+
+
+# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)PJASTNode.$(O) PJASTNode.$(H): PJASTNode.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJASTNodeVisitor.$(O) PJASTNodeVisitor.$(H): PJASTNodeVisitor.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaLexicon.$(O) PPJavaLexicon.$(H): PPJavaLexicon.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPCompositeParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaToken.$(O) PPJavaToken.$(H): PPJavaToken.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPToken.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaTokenParser.$(O) PPJavaTokenParser.$(H): PPJavaTokenParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPFlattenParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPTokenParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaWhitespaceParser.$(O) PPJavaWhitespaceParser.$(H): PPJavaWhitespaceParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)stx_goodies_petitparser_parsers_java.$(O) stx_goodies_petitparser_parsers_java.$(H): stx_goodies_petitparser_parsers_java.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)PJBlockNode.$(O) PJBlockNode.$(H): PJBlockNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJBodyDeclarationNode.$(O) PJBodyDeclarationNode.$(H): PJBodyDeclarationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJCompilationUnitNode.$(O) PJCompilationUnitNode.$(H): PJCompilationUnitNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJExpressionNode.$(O) PJExpressionNode.$(H): PJExpressionNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJImportDeclarationNode.$(O) PJImportDeclarationNode.$(H): PJImportDeclarationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJModifierNode.$(O) PJModifierNode.$(H): PJModifierNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJPackageDeclarationNode.$(O) PJPackageDeclarationNode.$(H): PJPackageDeclarationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJParameterDeclaratorNode.$(O) PJParameterDeclaratorNode.$(H): PJParameterDeclaratorNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJStatementNode.$(O) PJStatementNode.$(H): PJStatementNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJSyntaxNode.$(O) PJSyntaxNode.$(H): PJSyntaxNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJTypeNode.$(O) PJTypeNode.$(H): PJTypeNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJVariableDeclaratorNode.$(O) PJVariableDeclaratorNode.$(H): PJVariableDeclaratorNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaSyntax.$(O) PPJavaSyntax.$(H): PPJavaSyntax.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPCompositeParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PPJavaLexicon.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJAbstractTypeDeclarationNode.$(O) PJAbstractTypeDeclarationNode.$(H): PJAbstractTypeDeclarationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJAnnotationNode.$(O) PJAnnotationNode.$(H): PJAnnotationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJArrayTypeNode.$(O) PJArrayTypeNode.$(H): PJArrayTypeNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJTypeNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJBehaviouralNode.$(O) PJBehaviouralNode.$(H): PJBehaviouralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJBooleanLiteralNode.$(O) PJBooleanLiteralNode.$(H): PJBooleanLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJCharacterLiteralNode.$(O) PJCharacterLiteralNode.$(H): PJCharacterLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJCommentsNode.$(O) PJCommentsNode.$(H): PJCommentsNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJSyntaxNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJExpressionStatementNode.$(O) PJExpressionStatementNode.$(H): PJExpressionStatementNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJStatementNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJFloatLiteralNode.$(O) PJFloatLiteralNode.$(H): PJFloatLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJIdentifierNode.$(O) PJIdentifierNode.$(H): PJIdentifierNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJIfStatementNode.$(O) PJIfStatementNode.$(H): PJIfStatementNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJStatementNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJInfixOperationNode.$(O) PJInfixOperationNode.$(H): PJInfixOperationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJIntegerLiteralNode.$(O) PJIntegerLiteralNode.$(H): PJIntegerLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJLocalVariableDeclarationStatementNode.$(O) PJLocalVariableDeclarationStatementNode.$(H): PJLocalVariableDeclarationStatementNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJStatementNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJNameNode.$(O) PJNameNode.$(H): PJNameNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJNullLiteralNode.$(O) PJNullLiteralNode.$(H): PJNullLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJPrimitiveTypeNode.$(O) PJPrimitiveTypeNode.$(H): PJPrimitiveTypeNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJTypeNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJReturnStatementNode.$(O) PJReturnStatementNode.$(H): PJReturnStatementNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJStatementNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJSeparatorNode.$(O) PJSeparatorNode.$(H): PJSeparatorNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJStringLiteralNode.$(O) PJStringLiteralNode.$(H): PJStringLiteralNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJWhileStatementNode.$(O) PJWhileStatementNode.$(H): PJWhileStatementNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJStatementNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaParser.$(O) PPJavaParser.$(H): PPJavaParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPCompositeParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PPJavaLexicon.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PPJavaSyntax.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJConstructorDeclarationNode.$(O) PJConstructorDeclarationNode.$(H): PJConstructorDeclarationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJBehaviouralNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJEndOfLineCommentsNode.$(O) PJEndOfLineCommentsNode.$(H): PJEndOfLineCommentsNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJCommentsNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJSyntaxNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJMethodDeclarationNode.$(O) PJMethodDeclarationNode.$(H): PJMethodDeclarationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJBehaviouralNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJQualifiedNameNode.$(O) PJQualifiedNameNode.$(H): PJQualifiedNameNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJNameNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJSimpleNameNode.$(O) PJSimpleNameNode.$(H): PJSimpleNameNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJExpressionNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJNameNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJTraditionalCommentsNode.$(O) PJTraditionalCommentsNode.$(H): PJTraditionalCommentsNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJCommentsNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJSyntaxNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)PJTypeDeclarationNode.$(O) PJTypeDeclarationNode.$(H): PJTypeDeclarationNode.st $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJASTNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJAbstractTypeDeclarationNode.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/parsers/java/PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/Integer.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+
+# ENDMAKEDEPEND --- do not remove this line
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/Make.spec Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,160 @@
+# $Header$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: stx_goodies_petitparser_parsers_java.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# This file contains specifications which are common to all platforms.
+#
+
+# Do NOT CHANGE THESE DEFINITIONS
+# (otherwise, ST/X will have a hard time to find out the packages location from its packageID,
+# to find the source code of a class and to find the library for a package)
+MODULE=stx
+MODULE_DIR=goodies/petitparser/parsers/java
+PACKAGE=$(MODULE):$(MODULE_DIR)
+
+
+# Argument(s) to the stc compiler (stc --usage).
+# -headerDir=. : create header files locally
+# (if removed, they will be created as common
+# -Pxxx : defines the package
+# -Zxxx : a prefix for variables within the classLib
+# -Dxxx : defines passed to to CC for inline C-code
+# -Ixxx : include path passed to CC for inline C-code
+# +optspace : optimized for space
+# +optspace2 : optimized more for space
+# +optspace3 : optimized even more for space
+# +optinline : generate inline code for some ST constructs
+# +inlineNew : additionally inline new
+# +inlineMath : additionally inline some floatPnt math stuff
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCLOCALOPTIMIZATIONS=+optinline +inlineNew
+# STCLOCALOPTIMIZATIONS=+optspace3
+STCLOCALOPTIMIZATIONS=+optspace3 -inlinenot
+
+
+# Argument(s) to the stc compiler (stc --usage).
+# -warn : no warnings
+# -warnNonStandard : no warnings about ST/X extensions
+# -warnEOLComments : no warnings about EOL comment extension
+# -warnPrivacy : no warnings about privateClass extension
+# -warnUnused : no warnings about unused variables
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCWARNINGS=-warn
+# STCWARNINGS=-warnNonStandard
+# STCWARNINGS=-warnEOLComments
+STCWARNINGS=-warnNonStandard
+
+COMMON_CLASSES= \
+ PJASTNode \
+ PJASTNodeVisitor \
+ PPJavaLexicon \
+ PPJavaToken \
+ PPJavaTokenParser \
+ PPJavaWhitespaceParser \
+ stx_goodies_petitparser_parsers_java \
+ PJBlockNode \
+ PJBodyDeclarationNode \
+ PJCompilationUnitNode \
+ PJExpressionNode \
+ PJImportDeclarationNode \
+ PJModifierNode \
+ PJPackageDeclarationNode \
+ PJParameterDeclaratorNode \
+ PJStatementNode \
+ PJSyntaxNode \
+ PJTypeNode \
+ PJVariableDeclaratorNode \
+ PPJavaSyntax \
+ PJAbstractTypeDeclarationNode \
+ PJAnnotationNode \
+ PJArrayTypeNode \
+ PJBehaviouralNode \
+ PJBooleanLiteralNode \
+ PJCharacterLiteralNode \
+ PJCommentsNode \
+ PJExpressionStatementNode \
+ PJFloatLiteralNode \
+ PJIdentifierNode \
+ PJIfStatementNode \
+ PJInfixOperationNode \
+ PJIntegerLiteralNode \
+ PJLocalVariableDeclarationStatementNode \
+ PJNameNode \
+ PJNullLiteralNode \
+ PJPrimitiveTypeNode \
+ PJReturnStatementNode \
+ PJSeparatorNode \
+ PJStringLiteralNode \
+ PJWhileStatementNode \
+ PPJavaParser \
+ PJConstructorDeclarationNode \
+ PJEndOfLineCommentsNode \
+ PJMethodDeclarationNode \
+ PJQualifiedNameNode \
+ PJSimpleNameNode \
+ PJTraditionalCommentsNode \
+ PJTypeDeclarationNode \
+
+
+
+
+COMMON_OBJS= \
+ $(OUTDIR_SLASH)PJASTNode.$(O) \
+ $(OUTDIR_SLASH)PJASTNodeVisitor.$(O) \
+ $(OUTDIR_SLASH)PPJavaLexicon.$(O) \
+ $(OUTDIR_SLASH)PPJavaToken.$(O) \
+ $(OUTDIR_SLASH)PPJavaTokenParser.$(O) \
+ $(OUTDIR_SLASH)PPJavaWhitespaceParser.$(O) \
+ $(OUTDIR_SLASH)stx_goodies_petitparser_parsers_java.$(O) \
+ $(OUTDIR_SLASH)PJBlockNode.$(O) \
+ $(OUTDIR_SLASH)PJBodyDeclarationNode.$(O) \
+ $(OUTDIR_SLASH)PJCompilationUnitNode.$(O) \
+ $(OUTDIR_SLASH)PJExpressionNode.$(O) \
+ $(OUTDIR_SLASH)PJImportDeclarationNode.$(O) \
+ $(OUTDIR_SLASH)PJModifierNode.$(O) \
+ $(OUTDIR_SLASH)PJPackageDeclarationNode.$(O) \
+ $(OUTDIR_SLASH)PJParameterDeclaratorNode.$(O) \
+ $(OUTDIR_SLASH)PJStatementNode.$(O) \
+ $(OUTDIR_SLASH)PJSyntaxNode.$(O) \
+ $(OUTDIR_SLASH)PJTypeNode.$(O) \
+ $(OUTDIR_SLASH)PJVariableDeclaratorNode.$(O) \
+ $(OUTDIR_SLASH)PPJavaSyntax.$(O) \
+ $(OUTDIR_SLASH)PJAbstractTypeDeclarationNode.$(O) \
+ $(OUTDIR_SLASH)PJAnnotationNode.$(O) \
+ $(OUTDIR_SLASH)PJArrayTypeNode.$(O) \
+ $(OUTDIR_SLASH)PJBehaviouralNode.$(O) \
+ $(OUTDIR_SLASH)PJBooleanLiteralNode.$(O) \
+ $(OUTDIR_SLASH)PJCharacterLiteralNode.$(O) \
+ $(OUTDIR_SLASH)PJCommentsNode.$(O) \
+ $(OUTDIR_SLASH)PJExpressionStatementNode.$(O) \
+ $(OUTDIR_SLASH)PJFloatLiteralNode.$(O) \
+ $(OUTDIR_SLASH)PJIdentifierNode.$(O) \
+ $(OUTDIR_SLASH)PJIfStatementNode.$(O) \
+ $(OUTDIR_SLASH)PJInfixOperationNode.$(O) \
+ $(OUTDIR_SLASH)PJIntegerLiteralNode.$(O) \
+ $(OUTDIR_SLASH)PJLocalVariableDeclarationStatementNode.$(O) \
+ $(OUTDIR_SLASH)PJNameNode.$(O) \
+ $(OUTDIR_SLASH)PJNullLiteralNode.$(O) \
+ $(OUTDIR_SLASH)PJPrimitiveTypeNode.$(O) \
+ $(OUTDIR_SLASH)PJReturnStatementNode.$(O) \
+ $(OUTDIR_SLASH)PJSeparatorNode.$(O) \
+ $(OUTDIR_SLASH)PJStringLiteralNode.$(O) \
+ $(OUTDIR_SLASH)PJWhileStatementNode.$(O) \
+ $(OUTDIR_SLASH)PPJavaParser.$(O) \
+ $(OUTDIR_SLASH)PJConstructorDeclarationNode.$(O) \
+ $(OUTDIR_SLASH)PJEndOfLineCommentsNode.$(O) \
+ $(OUTDIR_SLASH)PJMethodDeclarationNode.$(O) \
+ $(OUTDIR_SLASH)PJQualifiedNameNode.$(O) \
+ $(OUTDIR_SLASH)PJSimpleNameNode.$(O) \
+ $(OUTDIR_SLASH)PJTraditionalCommentsNode.$(O) \
+ $(OUTDIR_SLASH)PJTypeDeclarationNode.$(O) \
+ $(OUTDIR_SLASH)extensions.$(O) \
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/Makefile.init Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,27 @@
+#
+# DO NOT EDIT
+#
+# make uses this file (Makefile) only, if there is no
+# file named "makefile" (lower-case m) in the same directory.
+# My only task is to generate the real makefile and call make again.
+# Thereafter, I am no longer used and needed.
+#
+# MACOSX caveat:
+# as filenames are not case sensitive (in a default setup),
+# we cannot use the above trick. Therefore, this file is now named
+# "Makefile.init", and you have to execute "make -f Makefile.init" to
+# get the initial makefile. This is now also done by the toplevel CONFIG
+# script.
+
+.PHONY: run
+
+run: makefile
+ $(MAKE) -f makefile
+
+#only needed for the definition of $(TOP)
+include Make.proto
+
+makefile: mf
+
+mf:
+ $(TOP)/rules/stmkmf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJASTNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,21 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+Object subclass:#PJASTNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJASTNode comment:'General node defining for Java AST'
+!
+
+!PJASTNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^self subclassResponsibility
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJASTNodeVisitor.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,144 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+Object subclass:#PJASTNodeVisitor
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST-Visitors'
+!
+
+PJASTNodeVisitor comment:'Abstract visitor with all methods needed to visit a PetitJava AST'
+!
+
+!PJASTNodeVisitor methodsFor:'as yet unclassified'!
+
+visitEndOfLineCommentsNode: anEndOfLineCommentNode
+ self visitNode: anEndOfLineCommentNode expression
+!
+
+visitTraditionalCommentsNode: aCommentNode
+ self visitNode: aCommentNode expression
+! !
+
+!PJASTNodeVisitor methodsFor:'visiting'!
+
+visitNode: aNode
+
+ ^aNode acceptVisitor: self
+! !
+
+!PJASTNodeVisitor methodsFor:'visitor-doubleDispatching'!
+
+visitBlockNode: aBodyNode
+ self visitNodes: aBodyNode statements
+!
+
+visitBooleanLiteralNode: aBooleanLiteralNode
+ self subclassResponsibility
+!
+
+visitCharacterLiteralNode: aCharacterLiteralNode
+ self subclassResponsibility
+!
+
+visitCommentsNode: aCommentNode
+ self visitNode: aCommentNode expression
+!
+
+visitCompilationUnitNode: aCompilationUnitNode
+
+ self flag: 'TODO'
+!
+
+visitExpressionStatementNode: anExpressionStatementNode
+ self visitNode: anExpressionStatementNode expression
+!
+
+visitFloatLiteralNode: aIntegerLiteralNode
+ self subclassResponsibility
+!
+
+visitIdentifierNode: anIdentifierNode
+ self subclassResponsibility
+!
+
+visitIfStatementNode: anIfStatementNode
+
+ self visitNode: anIfStatementNode condition.
+ self visitNode: anIfStatementNode thenPart.
+ self visitNode: anIfStatementNode elsePart
+!
+
+visitImportDeclarationNode: anImportDeclarationNode
+
+ self visitNode: anImportDeclarationNode nameNode
+!
+
+visitInfixOperationNode: anInfixOperationNode
+ self visitNode: anInfixOperationNode left.
+ self visitNode: anInfixOperationNode right
+!
+
+visitIntegerLiteralNode: aIntegerLiteralNode
+ self subclassResponsibility
+!
+
+visitLocalVariableDeclarationStatementNode: aLocalVariableDeclarationStatementNode
+ self visitNode: aLocalVariableDeclarationStatementNode type.
+ self visitNodes: aLocalVariableDeclarationStatementNode modifiers.
+ self visitNode: aLocalVariableDeclarationStatementNode declarators
+!
+
+visitMethodDeclarationNode: aMethodDeclarationNode
+ self visitNode: aMethodDeclarationNode returnType.
+ self visitNode: aMethodDeclarationNode simpleName.
+ self visitNode: aMethodDeclarationNode block
+!
+
+visitNameNode: aNameNode
+ "this is a leaf, so no further traversing"
+!
+
+visitNodes: aCollection
+ aCollection do: [:each | each acceptVisitor: self]
+!
+
+visitNullLiteralNode: aNullLiteralNode
+ self subclassResponsibility
+!
+
+visitPackageDeclarationNode: aPackageDeclarationNode
+
+ self visitNode: aPackageDeclarationNode nameNode
+!
+
+visitParameterDeclaratorNode: aParameterDeclaratorNode
+ self visitNode: aParameterDeclaratorNode identifier.
+ self visitNodes: aParameterDeclaratorNode modifiers
+!
+
+visitReturnStatementNode: aReturnStatementNode
+ self visitNode: aReturnStatementNode expression
+!
+
+visitSeparatorNode: aSeparatorNode
+ self subclassResponsibility
+!
+
+visitStringLiteralNode: aStringLiteralNode
+ self subclassResponsibility
+!
+
+visitVariableDeclaratorNode: aVariableDeclaratorNode
+ self visitNode: aVariableDeclaratorNode variable.
+ self visitNode: aVariableDeclaratorNode initializer
+!
+
+visitWhileStatementNode: aWhileStatementNode
+
+ self visitNode: aWhileStatementNode expression.
+ self visitNode: aWhileStatementNode statement
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJAbstractTypeDeclarationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJBodyDeclarationNode subclass:#PJAbstractTypeDeclarationNode
+ instanceVariableNames:'simpleName'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJAbstractTypeDeclarationNode comment:''
+!
+
+!PJAbstractTypeDeclarationNode methodsFor:'accessing'!
+
+simpleName
+ ^ simpleName
+!
+
+simpleName: anObject
+ simpleName := anObject
+! !
+
+!PJAbstractTypeDeclarationNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitAbstractTypeDeclarationNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJAnnotationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,43 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJAnnotationNode
+ instanceVariableNames:'typeName'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJAnnotationNode comment:''
+!
+
+!PJAnnotationNode class methodsFor:'instance creation'!
+
+typeName: aPJNameNode
+
+ ^(self new) typeName: aPJNameNode ; yourself
+! !
+
+!PJAnnotationNode methodsFor:'accessing'!
+
+typeName
+ ^ typeName
+!
+
+typeName: anObject
+ typeName := anObject
+! !
+
+!PJAnnotationNode methodsFor:'testing'!
+
+isAnnotation
+
+ ^true
+!
+
+isModifier
+
+ ^ false
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJArrayTypeNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,48 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJTypeNode subclass:#PJArrayTypeNode
+ instanceVariableNames:'dimensions elementType'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJArrayTypeNode comment:''
+!
+
+!PJArrayTypeNode class methodsFor:'instance creation'!
+
+elementType: aTypeNode dimensions: aNumber
+
+ ^(self new) elementType: aTypeNode; dimensions: aNumber; yourself
+! !
+
+!PJArrayTypeNode methodsFor:'accessing'!
+
+dimensions
+ ^ dimensions
+!
+
+dimensions: anObject
+ dimensions := anObject
+!
+
+elementType
+ ^ elementType
+!
+
+elementType: anObject
+ elementType := anObject
+!
+
+type
+
+ ^type ifNil: [type :=
+ ((1 to: dimensions)
+ inject: elementType type
+ into: [:current :parenthesis |
+ (current , '[]')]) ]
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJBehaviouralNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,47 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJBodyDeclarationNode subclass:#PJBehaviouralNode
+ instanceVariableNames:'simpleName returnType parameters'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJBehaviouralNode comment:'Behavioural node is some entity which has a behavior in it. This reffers to methods in general, but can also reffer to a constructor'
+!
+
+!PJBehaviouralNode class methodsFor:'instance creation'!
+
+named: aString
+
+ ^(self new) simpleName: aString ; yourself
+! !
+
+!PJBehaviouralNode methodsFor:'accessing'!
+
+parameters
+ ^ parameters
+!
+
+parameters: anObject
+ parameters := anObject
+!
+
+returnType
+ ^ returnType
+!
+
+returnType: anObject
+ returnType := anObject
+!
+
+simpleName
+ ^ simpleName
+!
+
+simpleName: anObject
+ simpleName := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJBlockNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,39 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJBlockNode
+ instanceVariableNames:'statements'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJBlockNode comment:'A node representing a block of java code.
A block begins with: { ends with: } and has statement in between.'
+!
+
+!PJBlockNode methodsFor:'accessing'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitStatementBlockNode: self
+!
+
+addStatement: aStatement
+ statements add: aStatement
+!
+
+statements
+ ^ statements
+!
+
+statements: aCollection
+ statements := OrderedCollection withAll: aCollection
+! !
+
+!PJBlockNode methodsFor:'initialize-release'!
+
+initialize
+ statements := OrderedCollection new
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJBodyDeclarationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJBodyDeclarationNode
+ instanceVariableNames:'modifiers'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJBodyDeclarationNode comment:'General body declaration of a class or method'
+!
+
+!PJBodyDeclarationNode methodsFor:'accessing'!
+
+modifiers
+ ^ modifiers
+!
+
+modifiers: anObject
+ modifiers := anObject
+! !
+
+!PJBodyDeclarationNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitBodyDeclarationNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJBooleanLiteralNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,38 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJBooleanLiteralNode
+ instanceVariableNames:'booleanValue'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJBooleanLiteralNode comment:'Node representing a boolean literal'
+!
+
+!PJBooleanLiteralNode class methodsFor:'instance creation'!
+
+booleanValue: aBoolean
+
+ ^(self new) booleanValue: aBoolean
+! !
+
+!PJBooleanLiteralNode methodsFor:'accessing'!
+
+booleanValue
+ ^ booleanValue
+!
+
+booleanValue: anObject
+ booleanValue := anObject
+! !
+
+!PJBooleanLiteralNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitBooleanLiteralNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJCharacterLiteralNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,34 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJCharacterLiteralNode
+ instanceVariableNames:'literalValue'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJCharacterLiteralNode comment:''
+!
+
+!PJCharacterLiteralNode class methodsFor:'as yet unclassified'!
+
+literalValue: aString
+ ^(self new) literalValue: aString
+! !
+
+!PJCharacterLiteralNode methodsFor:'as yet unclassified'!
+
+acceptVisitor: aVisitor
+ ^ aVisitor visitCharacterLiteralNode: self
+!
+
+literalValue
+ ^ literalValue
+!
+
+literalValue: anObject
+ literalValue := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJCommentsNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,41 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJSyntaxNode subclass:#PJCommentsNode
+ instanceVariableNames:'comment'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJCommentsNode comment:''
+!
+
+!PJCommentsNode class methodsFor:'as yet unclassified'!
+
+comment: aString
+ ^(self new) comment: aString; yourself.
+! !
+
+!PJCommentsNode methodsFor:'as yet unclassified'!
+
+acceptVisitor: aVisitor
+ ^ aVisitor visitCommentsNode: self
+!
+
+comment
+^ comment.
+!
+
+comment: aString
+ comment := aString.
+!
+
+printOn: aStream
+ ^ aStream
+ nextPutAll: 'comment value ==> ';
+ nextPutAll: self comment.
+
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJCompilationUnitNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,21 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJCompilationUnitNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJCompilationUnitNode comment:''
+!
+
+!PJCompilationUnitNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitCompilationUnitNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJConstructorDeclarationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,37 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJBehaviouralNode subclass:#PJConstructorDeclarationNode
+ instanceVariableNames:'constructorInvocation statements'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJConstructorDeclarationNode comment:'constructor-specific behavioural entity.
more in superclass comment'
+!
+
+!PJConstructorDeclarationNode methodsFor:'accessing'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitConstructorDeclarationNode: self
+!
+
+constructorInvocation
+ ^ constructorInvocation
+!
+
+constructorInvocation: aConstructorInvocation
+ constructorInvocation := aConstructorInvocation
+!
+
+statements
+ ^ statements
+!
+
+statements: aCollection
+ statements := aCollection
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJEndOfLineCommentsNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,34 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJCommentsNode subclass:#PJEndOfLineCommentsNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJEndOfLineCommentsNode comment:''
+!
+
+!PJEndOfLineCommentsNode class methodsFor:'as yet unclassified'!
+
+comment: aString
+ ^(self new) comment: aString; yourself.
+! !
+
+!PJEndOfLineCommentsNode methodsFor:'as yet unclassified'!
+
+comment: aString
+ aString ifNotNil: [ comment := (aString collect: #asciiValue) asByteArray asString ].
+ aString ifNil: [ comment := '' ]
+!
+
+printOn: aStream
+ .^ aStream
+ nextPutAll: 'EndOfLineComment value ==> ';
+ nextPutAll: self comment.
+
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJExpressionNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,21 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJExpressionNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJExpressionNode comment:'Common superclass for all expression nodes e.i. nodes that have some kind of valuse: variables, literals, method invocations, etc.'
+!
+
+!PJExpressionNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitExpressionNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJExpressionStatementNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJStatementNode subclass:#PJExpressionStatementNode
+ instanceVariableNames:'expression'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJExpressionStatementNode comment:'A statement which has nothing but expression in it.
Examples:
5;
a = 5;
a.foo();
a = for(5);'
+!
+
+!PJExpressionStatementNode methodsFor:'accessing'!
+
+expression
+ ^ expression
+!
+
+expression: anExpression
+ expression := anExpression
+! !
+
+!PJExpressionStatementNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitExpressionStatementNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJFloatLiteralNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,47 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJFloatLiteralNode
+ instanceVariableNames:'literalValue isLong isFloat'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJFloatLiteralNode comment:''
+!
+
+!PJFloatLiteralNode class methodsFor:'as yet unclassified'!
+
+newFrom: literalString
+ | instanse |
+
+ instanse := super new.
+ instanse isFloat: literalString last asUppercase = $F.
+ instanse literalValue: (instanse isFloat ifTrue: [ literalString allButLast ] ifFalse: [ literalString ]).
+ ^ instanse
+! !
+
+!PJFloatLiteralNode methodsFor:'as yet unclassified'!
+
+acceptVisitor: aVisitor
+ ^ aVisitor visitFloatLiteralNode: self
+!
+
+isFloat
+ ^ isFloat
+!
+
+isFloat: anObject
+ isFloat := anObject
+!
+
+literalValue
+ ^ literalValue
+!
+
+literalValue: anObject
+ literalValue := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJIdentifierNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,35 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJIdentifierNode
+ instanceVariableNames:'name'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJIdentifierNode comment:'An identifier node. Variable name is identifier'
+!
+
+!PJIdentifierNode class methodsFor:'instance-creation'!
+
+newWithName: aString
+ ^ super new name: aString; yourself
+! !
+
+!PJIdentifierNode methodsFor:'accessing'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitIdentifierNode: self
+!
+
+name
+ ^ name
+!
+
+name: aString
+ name := aString
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJIfStatementNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,47 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJStatementNode subclass:#PJIfStatementNode
+ instanceVariableNames:'condition thenPart elsePart'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJIfStatementNode comment:'Node representing an if statement. If with and without else are both covere by this node'
+!
+
+!PJIfStatementNode methodsFor:'accessing'!
+
+condition
+ ^ condition
+!
+
+condition: anObject
+ condition := anObject
+!
+
+elsePart
+ ^ elsePart
+!
+
+elsePart: anObject
+ elsePart := anObject
+!
+
+thenPart
+ ^ thenPart
+!
+
+thenPart: anObject
+ thenPart := anObject
+! !
+
+!PJIfStatementNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitIfStatementNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJImportDeclarationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,47 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJImportDeclarationNode
+ instanceVariableNames:'nameNode isStatic isOnDemand'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJImportDeclarationNode comment:''
+!
+
+!PJImportDeclarationNode methodsFor:'accessing'!
+
+isOnDemand
+ ^ isOnDemand
+!
+
+isOnDemand: anObject
+ isOnDemand := anObject
+!
+
+isStatic
+ ^ isStatic
+!
+
+isStatic: anObject
+ isStatic := anObject
+!
+
+nameNode
+ ^ nameNode
+!
+
+nameNode: anObject
+ nameNode := anObject
+! !
+
+!PJImportDeclarationNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitImportDeclarationNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJInfixOperationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,47 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJInfixOperationNode
+ instanceVariableNames:'left operator right'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJInfixOperationNode comment:'This node is a STUB!!!!!!!!
It''s being used for each node that consists of 2 expressions and some operation in between e.g.: +, -, =, +=, ==...'
+!
+
+!PJInfixOperationNode methodsFor:'accessing'!
+
+left
+ ^ left
+!
+
+left: anObject
+ left := anObject
+!
+
+operator
+ ^ operator
+!
+
+operator: anObject
+ operator := anObject
+!
+
+right
+ ^ right
+!
+
+right: anObject
+ right := anObject
+! !
+
+!PJInfixOperationNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitInfixOperationNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJIntegerLiteralNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,51 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJIntegerLiteralNode
+ instanceVariableNames:'literalValue isLong'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJIntegerLiteralNode comment:'A literal node of an integer valuse'
+!
+
+!PJIntegerLiteralNode class methodsFor:'as yet unclassified'!
+
+newFrom: literalString
+ | instanse |
+ instanse := super new.
+ instanse isLong: literalString last asUppercase = $L.
+ instanse literalValue: (
+ Integer readFromJavaString: (
+ instanse isLong ifTrue: [ literalString allButLast ] ifFalse: [ literalString ])).
+ ^ instanse
+! !
+
+!PJIntegerLiteralNode methodsFor:'accessing'!
+
+isLong
+ ^ isLong
+!
+
+isLong: anObject
+ isLong := anObject
+!
+
+literalValue
+ ^ literalValue
+!
+
+literalValue: aBoolean
+ literalValue := aBoolean
+! !
+
+!PJIntegerLiteralNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitIntegerLiteralNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJLocalVariableDeclarationStatementNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,45 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJStatementNode subclass:#PJLocalVariableDeclarationStatementNode
+ instanceVariableNames:'modifiers type declarators'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJLocalVariableDeclarationStatementNode comment:'Node representing a local variable declaration statement.
Eg:
int a;
int a = 5;
int a, b;
int a = 5, b;'
+!
+
+!PJLocalVariableDeclarationStatementNode methodsFor:'accessing'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitLocalVariableDeclarationStatementNode: self
+!
+
+declarators
+ ^ declarators
+!
+
+declarators: anObject
+ declarators := anObject
+!
+
+modifiers
+ ^ modifiers
+!
+
+modifiers: anObject
+ modifiers := anObject
+!
+
+type
+ ^ type
+!
+
+type: anObject
+ type := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJMethodDeclarationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,38 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJBehaviouralNode subclass:#PJMethodDeclarationNode
+ instanceVariableNames:'body'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJMethodDeclarationNode class instanceVariableNames:'aVisitor'
+
+"
+ No other class instance variables are inherited by this class.
+"
+!
+
+PJMethodDeclarationNode comment:''
+!
+
+!PJMethodDeclarationNode methodsFor:'accessing'!
+
+body
+ ^ body
+!
+
+body: anObject
+ body := anObject
+! !
+
+!PJMethodDeclarationNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitMethodDeclarationNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJModifierNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,43 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJModifierNode
+ instanceVariableNames:'keyword'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJModifierNode comment:''
+!
+
+!PJModifierNode class methodsFor:'instance creation'!
+
+keyword: aString
+
+ ^(self new) keyword: aString; yourself
+! !
+
+!PJModifierNode methodsFor:'accessing'!
+
+keyword
+ ^ keyword
+!
+
+keyword: anObject
+ keyword := anObject
+! !
+
+!PJModifierNode methodsFor:'testing'!
+
+isAnnotation
+
+ ^false
+!
+
+isModifier
+
+ ^true
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJNameNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,27 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJNameNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJNameNode comment:''
+!
+
+!PJNameNode methodsFor:'accessing'!
+
+fullyQualifiedName
+ ^ self subclassResponsibility
+! !
+
+!PJNameNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitNameNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJNullLiteralNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,35 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJNullLiteralNode
+ instanceVariableNames:'literalValue'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJNullLiteralNode comment:''
+!
+
+!PJNullLiteralNode class methodsFor:'as yet unclassified'!
+
+literalValue: aLiteral
+
+ ^(self new) literalValue: aLiteral
+! !
+
+!PJNullLiteralNode methodsFor:'as yet unclassified'!
+
+acceptVisitor: aVisitor
+ ^ aVisitor visitNullLiteralNode: self
+!
+
+literalValue
+ ^ literalValue
+!
+
+literalValue: anObject
+ literalValue := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJPackageDeclarationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJPackageDeclarationNode
+ instanceVariableNames:'nameNode'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJPackageDeclarationNode comment:''
+!
+
+!PJPackageDeclarationNode methodsFor:'accessing'!
+
+nameNode
+ ^ nameNode
+!
+
+nameNode: anObject
+ nameNode := anObject
+! !
+
+!PJPackageDeclarationNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitPackageDeclarationNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJParameterDeclaratorNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,55 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJParameterDeclaratorNode
+ instanceVariableNames:'modifiers type identifier arrayLevel'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJParameterDeclaratorNode comment:''
+!
+
+!PJParameterDeclaratorNode methodsFor:'accessing'!
+
+arrayLevel
+ ^ arrayLevel
+!
+
+arrayLevel: anObject
+ arrayLevel := anObject
+!
+
+identifier
+ ^ identifier
+!
+
+identifier: anObject
+ identifier := anObject
+!
+
+modifiers
+ ^ modifiers
+!
+
+modifiers: anObject
+ modifiers := anObject
+!
+
+type
+ ^ type
+!
+
+type: anObject
+ type := anObject
+! !
+
+!PJParameterDeclaratorNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitParameterDeclaratorNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJPrimitiveTypeNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,20 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJTypeNode subclass:#PJPrimitiveTypeNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJPrimitiveTypeNode comment:''
+!
+
+!PJPrimitiveTypeNode methodsFor:'as yet unclassified'!
+
+acceptVisitor: aVisitor
+ ^ aVisitor visitPrimitiveTypeNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJQualifiedNameNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,43 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJNameNode subclass:#PJQualifiedNameNode
+ instanceVariableNames:'qualifier simpleName'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJQualifiedNameNode comment:''
+!
+
+!PJQualifiedNameNode class methodsFor:'instance creation'!
+
+name: aPJSimpleName qualifier: aPJName
+
+ ^(self new) simpleName: aPJSimpleName ; qualifier: aPJName; yourself
+! !
+
+!PJQualifiedNameNode methodsFor:'accessing'!
+
+fullyQualifiedName
+ ^ (self qualifier fullyQualifiedName ) , '.' , self simpleName fullyQualifiedName
+!
+
+qualifier
+ ^ qualifier
+!
+
+qualifier: anObject
+ qualifier := anObject
+!
+
+simpleName
+ ^ simpleName
+!
+
+simpleName: anObject
+ simpleName := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJReturnStatementNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJStatementNode subclass:#PJReturnStatementNode
+ instanceVariableNames:'expression'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJReturnStatementNode comment:'Return statement node.
Ex:
return 5;
return 5+a.foo();
return a;'
+!
+
+!PJReturnStatementNode methodsFor:'accessing'!
+
+expression
+ ^ expression
+!
+
+expression: anExpression
+ expression := anExpression
+! !
+
+!PJReturnStatementNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitReturnStatementNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJSeparatorNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,35 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJSeparatorNode
+ instanceVariableNames:'separatorValue'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJSeparatorNode comment:''
+!
+
+!PJSeparatorNode class methodsFor:'as yet unclassified'!
+
+separatorValue: aString
+
+ ^(self new) separatorValue: aString
+! !
+
+!PJSeparatorNode methodsFor:'as yet unclassified'!
+
+acceptVisitor: aVisitor
+ ^ aVisitor visitSeparatorNode: self
+!
+
+separatorValue
+ ^ separatorValue.
+!
+
+separatorValue: anObject
+ separatorValue := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJSimpleNameNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,43 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJNameNode subclass:#PJSimpleNameNode
+ instanceVariableNames:'isDeclaration identifier'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJSimpleNameNode comment:''
+!
+
+!PJSimpleNameNode class methodsFor:'instance creation'!
+
+identifier: aString
+
+ ^(self new) identifier: aString; yourself
+! !
+
+!PJSimpleNameNode methodsFor:'accessing'!
+
+fullyQualifiedName
+ ^ self identifier value
+!
+
+identifier
+ ^ identifier
+!
+
+identifier: anObject
+ identifier := anObject
+!
+
+isDeclaration
+ ^ isDeclaration
+!
+
+isDeclaration: anObject
+ isDeclaration := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJStatementNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,14 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJStatementNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJStatementNode comment:'A general superclass for every statement node.
Example: if, while, return, variable declaration..'
+!
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJStringLiteralNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,37 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJExpressionNode subclass:#PJStringLiteralNode
+ instanceVariableNames:'literalValue'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJStringLiteralNode comment:'A node of a string literal.'
+!
+
+!PJStringLiteralNode class methodsFor:'instance creation'!
+
+literalValue: aString
+
+ ^(self new) literalValue: aString
+! !
+
+!PJStringLiteralNode methodsFor:'accessing'!
+
+literalValue
+ ^ literalValue
+!
+
+literalValue: anObject
+ literalValue := anObject
+! !
+
+!PJStringLiteralNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+ ^ aVisitor visitStringLiteralNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJSyntaxNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,14 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJSyntaxNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJSyntaxNode comment:''
+!
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJTraditionalCommentsNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,48 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJCommentsNode subclass:#PJTraditionalCommentsNode
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJTraditionalCommentsNode comment:''
+!
+
+
+!PJTraditionalCommentsNode methodsFor:'as yet unclassified'!
+
+comment: anArray
+ | temp temp2 |
+ temp := OrderedCollection new.
+ temp2 := anArray.
+ temp2
+ ifNotNil: [
+ [ temp2 first = '*' and: temp2 second = '/' ]
+ whileFalse: [
+ temp2 first = '*'
+ ifFalse: [ temp2 first second ifNotNil: [ temp add: temp2 first second ] ]
+ ifTrue: [ temp2 first first ifNotNil: [ temp add: temp2 first first ] ].
+ temp2 := temp2 second ].
+ comment := (temp collect: #asciiValue) asByteArray asString ].
+ anArray isNil
+ ifTrue: [ comment := '' ]
+!
+
+printOn: aStream
+ ^ aStream
+ nextPutAll: 'comment value ==> ';
+ nextPutAll: self comment.
+
+! !
+
+!PJTraditionalCommentsNode class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJTypeDeclarationNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,64 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJAbstractTypeDeclarationNode subclass:#PJTypeDeclarationNode
+ instanceVariableNames:'isInterface superclassType superInterfaceTypes fieldDeclarations
+ methodDeclarations'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJTypeDeclarationNode comment:''
+!
+
+!PJTypeDeclarationNode methodsFor:'accessing'!
+
+fieldDeclarations
+ ^ fieldDeclarations
+!
+
+fieldDeclarations: anObject
+ fieldDeclarations := anObject
+!
+
+isInterface
+ ^ isInterface
+!
+
+isInterface: anObject
+ isInterface := anObject
+!
+
+methodDeclarations
+ ^ methodDeclarations
+!
+
+methodDeclarations: anObject
+ methodDeclarations := anObject
+!
+
+superInterfaceTypes
+ ^ superInterfaceTypes
+!
+
+superInterfaceTypes: anObject
+ superInterfaceTypes := anObject
+!
+
+superclassType
+ ^ superclassType
+!
+
+superclassType: anObject
+ superclassType := anObject
+! !
+
+!PJTypeDeclarationNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ aVisitor visitTypeDeclarationNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJTypeNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJTypeNode
+ instanceVariableNames:'type'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJTypeNode comment:''
+!
+
+!PJTypeNode class methodsFor:'instance creation'!
+
+type: aString
+
+ ^(self new) type: aString; yourself
+! !
+
+!PJTypeNode methodsFor:'accessing'!
+
+type
+ ^ type
+!
+
+type: anObject
+ type := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJVariableDeclaratorNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,45 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJASTNode subclass:#PJVariableDeclaratorNode
+ instanceVariableNames:'variable arrayLevel initializer'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJVariableDeclaratorNode comment:'A part of local variable declaration statement.
Example.
statement: int a;
declarator: a
statement: float a, b = 4;
declarator1: a
declarator2: b = 4'
+!
+
+!PJVariableDeclaratorNode methodsFor:'accessing'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitVariableDeclaratorNode: self
+!
+
+arrayLevel
+ ^ arrayLevel
+!
+
+arrayLevel: anObject
+ arrayLevel := anObject
+!
+
+initializer
+ ^ initializer
+!
+
+initializer: anObject
+ initializer := anObject
+!
+
+variable
+ ^ variable
+!
+
+variable: anObject
+ variable := anObject
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PJWhileStatementNode.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,39 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PJStatementNode subclass:#PJWhileStatementNode
+ instanceVariableNames:'expression statement'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-AST'
+!
+
+PJWhileStatementNode comment:'Node representing a while loop'
+!
+
+!PJWhileStatementNode methodsFor:'accessing'!
+
+expression
+ ^ expression
+!
+
+expression: anObject
+ expression := anObject
+!
+
+statement
+ ^ statement
+!
+
+statement: anObject
+ statement := anObject
+! !
+
+!PJWhileStatementNode methodsFor:'visiting'!
+
+acceptVisitor: aVisitor
+
+ ^ aVisitor visitWhileStatementNode: self
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaLexicon.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,533 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCompositeParser subclass:#PPJavaLexicon
+ instanceVariableNames:'unicodeEscape rawInputCharacter unicodeMarker hexDigit
+ lineTerminator unicodeInputCharacter inputElements sub
+ inputElement whiteSpace comment javaToken keyword literal
+ separator operator identifier traditionalComment endOfLineComment
+ commentTail charactersInLine commentTailStar notStar
+ notStarNotSlash inputCharacter booleanLiteral nullLiteral
+ identifierChars javaLetter javaLetterOrDigit keywords
+ floatingPointLiteral integerLiteral characterLiteral
+ stringLiteral hexIntegerLiteral octalIntegerLiteral
+ decimalIntegerLiteral decimalNumeral integerTypeSuffix hexNumeral
+ octalNumeral nonZeroDigit digits hexDigits octalDigits octalDigit
+ hexadecimalFloatingPointLiteral decimalFloatingPointLiteral
+ exponentPart floatTypeSuffix exponentIndicator signedInteger sign
+ hexSignificand binaryExponent binaryExponentIndicator
+ escapeSequence singleCharacter stringCharacters stringCharacter
+ octalEscape zeroToThree input operators separators trueToken
+ falseToken nullToken'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Core'
+!
+
+PPJavaLexicon comment:'A parser with a definitions for some basic Java gramar parts
Grammar rules follow as closely as possible the specification found in "The Java Language Specification Third Edition"
URL = '
+!
+
+!PPJavaLexicon class methodsFor:'accessing'!
+
+ignoredNames
+ "Answer a collection of instance-variables that should not be automatically initialized with productions, but that are used internal to the composite parser."
+
+ | newArray |
+ newArray := Array new: ((self namesToIgnore size) + (super ignoredNames size)).
+ newArray
+ replaceFrom: 1
+ to: self namesToIgnore size
+ with: self namesToIgnore.
+ newArray
+ replaceFrom: (self namesToIgnore size + 1)
+ to: newArray size
+ with: super ignoredNames.
+ ^newArray
+!
+
+namesToIgnore
+
+ ^#('keywords' 'operators' 'separators')
+! !
+
+!PPJavaLexicon methodsFor:'accessing'!
+
+start
+ "Default start production."
+
+ ^ input end
+! !
+
+!PPJavaLexicon methodsFor:'grammar-comments'!
+
+charactersInLine
+
+ ^ inputCharacter plus
+!
+
+comment
+ "traditional -> /*
+ endOfLine -> //"
+ ^ traditionalComment / endOfLineComment
+!
+
+commentTail
+
+ ^ ('*' asParser , commentTailStar ) /
+ (notStar , commentTail)
+!
+
+commentTailStar
+
+ ^ ('/' asParser ) /
+ ('*' asParser , commentTailStar ) /
+ (notStarNotSlash , commentTail )
+!
+
+endOfLineComment
+
+ ^ '//' asParser , charactersInLine optional
+!
+
+notStar
+
+ ^ ('*' asParser not , inputCharacter)/lineTerminator
+!
+
+notStarNotSlash
+
+ ^ lineTerminator / ((PPPredicateObjectParser anyOf: '*/') not , inputCharacter )
+!
+
+traditionalComment
+
+ ^ '/*' asParser , commentTail
+! !
+
+!PPJavaLexicon methodsFor:'grammar-identifiers'!
+
+identifier
+
+ ^ self asToken: (((keyword not) , (booleanLiteral not) , (nullLiteral not) , identifierChars ))
+!
+
+identifierChars
+
+ ^ javaLetter plus , javaLetterOrDigit star
+!
+
+javaLetter
+
+ ^ (#letter asParser) / (PPPredicateObjectParser anyOf: '_$')
+!
+
+javaLetterOrDigit
+
+ ^ javaLetter / (#digit asParser)
+! !
+
+!PPJavaLexicon methodsFor:'grammar-input'!
+
+input
+
+ ^ (inputElements optional) , (sub optional)
+!
+
+inputElement
+
+ ^ whiteSpace / comment / javaToken
+!
+
+inputElements
+
+ ^ inputElement plus
+!
+
+javaToken
+
+
+ ^ identifier / keyword / literal / separator / operator
+!
+
+sub
+
+ ^ (Character value: 26) asParser
+! !
+
+!PPJavaLexicon methodsFor:'grammar-keywords'!
+
+keyword
+
+ | keywordParsers |
+
+ keywordParsers := keywords keysSortedSafely
+ collect: [:eachKey | keywords at: eachKey ].
+ ^ self asToken: ( (keywordParsers reduce: [ :a :b | a / b ]) )
+! !
+
+!PPJavaLexicon methodsFor:'grammar-lineTerminators'!
+
+inputCharacter
+
+ ^(lineTerminator not) , unicodeInputCharacter ==> #second
+!
+
+lineTerminator
+
+ ^ (Character lf asParser) / (Character cr asParser , (Character lf asParser ) optional )
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals'!
+
+literal
+ "a literal must be a single token. Whitespaces are not allowed inside the literal"
+
+ ^ nullLiteral / booleanLiteral / floatingPointLiteral / integerLiteral / characterLiteral / stringLiteral
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals-boolean'!
+
+booleanLiteral
+
+ ^ trueToken / falseToken
+!
+
+falseToken
+ ^ ('false' asParser , #word asParser not) javaToken
+!
+
+nullToken
+ ^ ('null' asParser , #word asParser not) javaToken
+!
+
+trueToken
+ ^ ('true' asParser , #word asParser not) javaToken
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals-character'!
+
+characterLiteral
+
+ ^ ($' asParser , ( escapeSequence / singleCharacter ), $' asParser) javaToken
+!
+
+singleCharacter
+
+ ^( PPPredicateObjectParser anyOf: '''\') not , inputCharacter ==> #second
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals-escape'!
+
+escapeSequence
+
+ ^ ($\ asParser , (PPPredicateObjectParser anyOf: 'btnfr""''\' ) ) /
+ octalEscape
+!
+
+octalEscape
+
+ ^ $\ asParser , ( (zeroToThree , octalDigit , octalDigit) / (octalDigit , octalDigit optional) )
+!
+
+zeroToThree
+
+ ^PPPredicateObjectParser anyOf: '0123'
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals-floating'!
+
+binaryExponent
+
+ ^ binaryExponentIndicator , signedInteger
+!
+
+binaryExponentIndicator
+
+ ^ PPPredicateObjectParser anyOf: 'pP'
+!
+
+decimalFloatingPointLiteral
+
+ |dot|
+ dot := $. asParser.
+
+ ^ ( ( (dot , digits)
+ /
+ (digits , dot , digits optional)) ,
+ exponentPart optional , floatTypeSuffix optional )
+ /
+ (digits ,
+ ( (exponentPart , floatTypeSuffix optional)
+ /
+ (exponentPart optional , floatTypeSuffix) ))
+!
+
+exponentIndicator
+
+ ^ PPPredicateObjectParser anyOf: 'eE'
+!
+
+exponentPart
+
+ ^ exponentIndicator , signedInteger
+!
+
+floatTypeSuffix
+
+ ^ PPPredicateObjectParser anyOf: 'fFdD'
+!
+
+floatingPointLiteral
+
+ ^ (hexadecimalFloatingPointLiteral / decimalFloatingPointLiteral) javaToken
+!
+
+hexSignificand
+ |dot|
+ dot := $. asParser.
+
+ ^ (hexNumeral , dot optional) /
+ ($0 asParser , (PPPredicateObjectParser anyOf: 'xX') , hexDigits optional , dot , hexDigits )
+!
+
+hexadecimalFloatingPointLiteral
+
+ ^ hexSignificand , binaryExponent , floatTypeSuffix optional
+!
+
+sign
+
+ ^PPPredicateObjectParser anyOf: '-+'
+!
+
+signedInteger
+
+ ^ sign optional , digits
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals-integer'!
+
+decimalIntegerLiteral
+
+ ^ decimalNumeral , (integerTypeSuffix optional)
+!
+
+decimalNumeral
+
+ ^($0 asParser) / (nonZeroDigit , digits optional)
+!
+
+digits
+ "digit is already defined, no need to redefine it"
+ ^#digit asParser plus
+!
+
+hexDigits
+
+ ^hexDigit plus
+!
+
+hexIntegerLiteral
+
+ ^ hexNumeral , (integerTypeSuffix optional)
+!
+
+hexNumeral
+
+ ^$0 asParser, (PPPredicateObjectParser anyOf: 'xX' ), hexDigits
+!
+
+integerLiteral
+
+ ^ (hexIntegerLiteral / octalIntegerLiteral / decimalIntegerLiteral) javaToken
+!
+
+integerTypeSuffix
+
+ ^ PPPredicateObjectParser anyOf: 'lL'
+!
+
+nonZeroDigit
+
+ ^PPPredicateObjectParser anyOf: '123456789'.
+!
+
+octalDigit
+
+ ^PPPredicateObjectParser anyOf: '01234567'
+!
+
+octalDigits
+
+ ^ octalDigit plus
+!
+
+octalIntegerLiteral
+
+ ^ octalNumeral , (integerTypeSuffix optional)
+!
+
+octalNumeral
+
+ ^($0 asParser) , octalDigits
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals-null'!
+
+nullLiteral
+
+ ^ nullToken
+! !
+
+!PPJavaLexicon methodsFor:'grammar-literals-string'!
+
+stringCharacter
+
+ ^ ( ( PPPredicateObjectParser anyOf: '"\') not , inputCharacter ==> #second ) /
+ escapeSequence
+!
+
+stringCharacters
+
+ ^ stringCharacter plus
+!
+
+stringLiteral
+
+ ^ ($" asParser , stringCharacters optional , $" asParser) javaToken
+! !
+
+!PPJavaLexicon methodsFor:'grammar-operators'!
+
+operator
+ | operatorParsers |
+
+ operatorParsers := operators keysSortedSafely
+ collect: [:eachKey | operators at: eachKey ].
+
+ ^self asToken: (operatorParsers reduce: [ :a :b | a / b ])
+! !
+
+!PPJavaLexicon methodsFor:'grammar-separators'!
+
+separator
+ ^self asToken: (PPPredicateObjectParser anyOf: '(){}[];,.' )
+! !
+
+!PPJavaLexicon methodsFor:'grammar-unicode-escapes'!
+
+hexDigit
+
+ ^#hex asParser
+!
+
+rawInputCharacter
+
+ ^#any asParser
+!
+
+unicodeEscape
+
+ ^ $\ asParser , unicodeMarker , hexDigit , hexDigit , hexDigit , hexDigit
+!
+
+unicodeInputCharacter
+ ^ unicodeEscape / rawInputCharacter
+!
+
+unicodeMarker
+
+ ^$u asParser plus
+! !
+
+!PPJavaLexicon methodsFor:'grammar-whiteSpace'!
+
+whiteSpace
+
+ ^ (Character space asParser ) /
+ (Character tab asParser ) /
+ ((Character value: 12) asParser ) /
+ lineTerminator
+! !
+
+!PPJavaLexicon methodsFor:'initialization'!
+
+initialize
+
+ super initialize.
+
+ self initializeKeywords.
+ self initializeOperators.
+ self initializeSeparators.
+!
+
+initializeKeywords
+
+ | values |
+ keywords := Dictionary new.
+ values := #('abstract' 'assert' 'boolean' 'break' 'byte' 'case' 'catch' 'char' 'class' 'const'
+ 'continue' 'default' 'do' 'double' 'else' 'enum' 'extends' 'final' 'finally' 'float'
+ 'for' 'if' 'goto' 'implements' 'import' 'instanceof' 'int' 'interface' 'long' 'native'
+ 'new' 'package' 'private' 'protected' 'public' 'return' 'short' 'static' 'strictfp' 'super'
+ 'switch' 'synchronized' 'this' 'throw' 'throws' 'transient' 'try' 'void' 'volatile' 'while').
+
+ values do: [:eachKeyword |
+ keywords at: eachKeyword
+ put: (PPUnresolvedParser named: ('keyword', eachKeyword first asUppercase asString , eachKeyword allButFirst))
+ ].
+
+ keywords keysAndValuesDo: [:key :value |
+ (keywords at: key) def: (key asParser , #word asParser not)]
+!
+
+initializeOperators
+
+ | values |
+ operators := Dictionary new.
+ values := #( '>>>=' '>>>' '>>=' '>>' '>=' '>' '<<=' '<<' '<=' '<' '++' '+=' '+' '--' '-=' '-' '&&' '&=' '&'
+ '||' '|=' '|' '*=' '*' '%=' '%' '/=' '/' '^=' '^' '!!=' '!!' '==' '=' '~' '?' ':' '@' ).
+ " @ ? perhaps for annotation but not in the doc "
+ values do: [:eachOperator |
+ operators at: eachOperator
+ put: (PPUnresolvedParser named: ('operator', eachOperator asString))
+ ].
+
+ operators keysAndValuesDo: [:key :value |
+ (operators at: key) def: (key asParser)]
+!
+
+initializeSeparators
+
+ | values |
+ separators := Dictionary new.
+ values := #( '(' ')' '{' '}' '[' ']' ';' ',' '.' ).
+
+ values do: [:eachSeparator |
+ separators at: eachSeparator
+ put: (PPUnresolvedParser named: ('separator', eachSeparator asString))
+ ].
+
+ separators keysAndValuesDo: [:key :value |
+ (separators at: key) def: (key asParser)]
+! !
+
+!PPJavaLexicon methodsFor:'utility'!
+
+asToken: aParser
+
+ ^aParser javaToken
+!
+
+emptySquaredParenthesis
+
+ ^ self asToken: (((self tokenFor: '['), (self tokenFor: ']')))
+!
+
+tokenFor: aString
+
+ ^self asToken: (keywords at: aString
+ ifAbsent: [separators at: aString
+ ifAbsent: [operators at: aString] ])
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaLexiconTest.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,750 @@
+"{ Encoding: utf8 }"
+
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCompositeParserTest subclass:#PPJavaLexiconTest
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Tests'
+!
+
+PPJavaLexiconTest comment:''
+!
+
+!PPJavaLexiconTest methodsFor:'accessing'!
+
+parserClass
+ ^ PPJavaLexicon
+! !
+
+!PPJavaLexiconTest methodsFor:'testing'!
+
+testIdentifier6
+
+ self
+ fail: 'super'
+ rule: #identifier
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-comments'!
+
+testComment1
+
+ self
+ parse: '//'
+ rule: #comment
+!
+
+testComment2
+
+ self
+ parse: '//comment'
+ rule: #comment
+!
+
+testComment3
+
+ self
+ parse: '// comment'
+ rule: #comment
+!
+
+testComment4
+
+ self
+ parse: '/* comment */'
+ rule: #comment
+!
+
+testComment5
+
+ self
+ fail: '/* comment '
+ rule: #comment
+!
+
+testComment6
+
+ self
+ parse: '/* this comment /* // /** ends here: */'
+ rule: #comment
+!
+
+testComment7
+
+ self
+ parse: '/**
+ * @param args
+ * @return void
+ */'
+ rule: #comment
+!
+
+testTraditionalComment1
+
+ self
+ parse: '/* this comment */'
+ rule: #traditionalComment
+!
+
+testTraditionalComment2
+
+ self
+ parse: '/* this comment / */'
+ rule: #comment
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-identifiers'!
+
+testIdentifier1
+
+ self
+ parse: 'String'
+ rule: #identifier
+!
+
+testIdentifier2
+
+ self
+ parse: 'i3'
+ rule: #identifier
+!
+
+testIdentifier3
+
+ self
+ parse: 'αρετη'
+ rule: #identifier
+!
+
+testIdentifier4
+
+ self
+ parse: 'MAX_VALUE'
+ rule: #identifier
+!
+
+testIdentifier5
+
+ self
+ parse: 'isLetterOrDigit'
+ rule: #identifier
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-input'!
+
+testInput1
+
+ self parse: 'package testPackage;
+ class Test {
+ public static void main(String[] args) {
+ String hello = "Hello", lo = "lo";
+ System.out.print((hello == "Hello") + " ");
+ System.out.print((Other.hello == hello) + " ");
+ System.out.print((other.Other.hello == hello) + " ");
+ System.out.print((hello == ("Hel"+"lo")) + " ");
+ System.out.print((hello == ("Hel"+lo)) + " ");
+ System.out.println(hello == ("Hel"+lo).intern());
+ }
+ }
+ class Other { static String hello = "Hello"; }'
+ rule: #input
+!
+
+testInput2
+
+ self parse: 'package other;
+ public class Other { static String hello = "Hello"; }'
+ rule: #input
+!
+
+testInput3
+
+ self parse: 'class Value { int val; }
+ class Test {
+ public static void main(String[] args) {
+ int i1 = 3;
+ int i2 = i1;
+ i2 = 4;
+ System.out.print("i1==" + i1);
+ System.out.println(" but i2==" + i2);
+ Value v1 = new Value();
+ v1.val = 5;
+ Value v2 = v1;
+ v2.val = 6;
+ System.out.print("v1.val==" + v1.val);
+ System.out.println(" and v2.val==" + v2.val);
+ }
+ }'
+ rule: #input
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-lineTerminators'!
+
+testInputCharacter1
+
+ self
+ parse: '\'
+ rule: #inputCharacter
+!
+
+testInputCharacter2
+
+ self
+ fail: (Character cr asString)
+ rule: #inputCharacter
+!
+
+testInputCharacter3
+
+ self
+ fail: (Character lf asString)
+ rule: #inputCharacter
+!
+
+testLineTerminator1
+
+ self
+ parse: (Character lf asString)
+ rule: #lineTerminator
+!
+
+testLineTerminator2
+
+ self
+ parse: (Character cr asString)
+ rule: #lineTerminator
+!
+
+testLineTerminator3
+
+ self
+ parse: (Character cr asString , Character lf asString)
+ rule: #lineTerminator
+!
+
+testLineTerminator4
+
+ self
+ fail: (Character space asString)
+ rule: #lineTerminator
+!
+
+testLineTerminator5
+
+ self
+ fail: ('a' asString)
+ rule: #lineTerminator
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-literal-float'!
+
+testFloatLiteral1
+ self
+ parse: '1e1f'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral10
+ self
+ parse: '0.0'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral11
+ self
+ parse: '3.14'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral12
+ self
+ parse: '1e-9d'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral13
+ self
+ parse: '1e137'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral2
+ self
+ parse: '2.f'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral3
+ self
+ parse: '.3f'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral4
+ self
+ parse: '0f'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral5
+ self
+ parse: '3.14f'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral6
+ self
+ parse: '6.022137e+23f'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral7
+ self
+ parse: '1e1'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral8
+ self
+ parse: '2.'
+ rule: #floatingPointLiteral
+!
+
+testFloatLiteral9
+ self
+ parse: '.3'
+ rule: #floatingPointLiteral
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-literals'!
+
+testBooleanLiteral1
+ self
+ parse: 'true'
+ rule: #booleanLiteral
+!
+
+testBooleanLiteral2
+ self
+ parse: 'false'
+ rule: #booleanLiteral
+!
+
+testLiteral1
+
+ self
+ parse: 'null'
+ rule: #literal
+!
+
+testLiteral10
+
+ self
+ fail: '0777 L'
+ rule: #literal
+!
+
+testLiteral11
+
+ self
+ fail: '0777 0'
+ rule: #literal
+!
+
+testLiteral12
+
+ self
+ fail: '0 x'
+ rule: #literal
+!
+
+testLiteral13
+
+ self
+ parse: '"This is a Java string"'
+ rule: #literal
+!
+
+testLiteral2
+
+ self
+ parse: 'false'
+ rule: #literal
+!
+
+testLiteral3
+
+ self
+ parse: '6.022137e+23f'
+ rule: #literal
+!
+
+testLiteral4
+
+ self
+ parse: '1e1'
+ rule: #literal
+!
+
+testLiteral5
+
+ self
+ parse: '0x100000000L'
+ rule: #literal
+!
+
+testLiteral6
+
+ self
+ parse: '0372'
+ rule: #literal
+!
+
+testLiteral7
+
+ self
+ parse: '0xDadaCafe'
+ rule: #literal
+!
+
+testLiteral8
+
+ self
+ parse: '0x00FF00FF'
+ rule: #literal
+!
+
+testLiteral9
+
+ self
+ parse: '0777L'
+ rule: #literal
+!
+
+testNullLiteral1
+
+ self
+ parse: 'null'
+ rule: #nullLiteral
+!
+
+testStringLiteral1
+
+ self
+ parse: '""'
+ rule: #stringLiteral
+!
+
+testStringLiteral10
+
+ self
+ fail: '"This is a \\
+ two lines Java string"'
+ rule: #stringLiteral
+!
+
+testStringLiteral11
+
+ self
+ parse: '"null"'
+ rule: #stringLiteral
+!
+
+testStringLiteral2
+
+ self
+ parse: '"\""'
+ rule: #stringLiteral
+!
+
+testStringLiteral3
+
+ self
+ parse: '"This is a Java string"'
+ rule: #stringLiteral
+!
+
+testStringLiteral4
+
+ self
+ fail: '"This is a
+ two lines Java string"'
+ rule: #stringLiteral
+!
+
+testStringLiteral5
+
+ self
+ fail: '"This is a \b
+ two lines Java string"'
+ rule: #stringLiteral
+!
+
+testStringLiteral6
+
+ self
+ fail: '"This is a \t
+ two lines Java string"'
+ rule: #stringLiteral
+!
+
+testStringLiteral7
+
+ self
+ fail: '"This is a \n
+ two lines Java string"'
+ rule: #stringLiteral
+!
+
+testStringLiteral8
+
+ self
+ fail: '"This is a \f
+ two lines Java string"'
+ rule: #stringLiteral
+!
+
+testStringLiteral9
+
+ self
+ fail: '"This is a \r
+ two lines Java string"'
+ rule: #stringLiteral
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-literals-characters'!
+
+testCharacterLiteral1
+ self
+ parse: '''a'''
+ rule: #characterLiteral
+!
+
+testCharacterLiteral2
+ self
+ parse: '''%'''
+ rule: #characterLiteral
+!
+
+testCharacterLiteral3
+ self
+ parse: '''\t'''
+ rule: #characterLiteral
+!
+
+testCharacterLiteral4
+ self
+ parse: '''\\'''
+ rule: #characterLiteral
+!
+
+testCharacterLiteral5
+ self
+ parse: '''\'''''
+ rule: #characterLiteral
+!
+
+testCharacterLiteral6
+ "not clear how this must be supported
+ (see http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.6)"
+
+ "self
+ parse: '''\u03a9'''
+ rule: #characterLiteral"
+!
+
+testCharacterLiteral7
+ "not clear how this must be supported
+ (see http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.6)"
+ "
+ self
+ parse: '''\uFFFF'''
+ rule: #characterLiteral"
+!
+
+testCharacterLiteral8
+ self
+ parse: '''\177'''
+ rule: #characterLiteral
+!
+
+testSeparator1
+ self
+ parse: '{'
+ rule: #separator
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-literals-integer'!
+
+testHexIntegerLiteral1
+ self
+ parse: '0xC0B0L'
+ rule: #hexIntegerLiteral
+!
+
+testIntegerLiteral1
+ self
+ parse: '0'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral10
+ self
+ parse: '1996'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral11
+ self
+ parse: '0x00FF00FF'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral2
+ self
+ parse: '0l'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral3
+ self
+ parse: '0777L'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral4
+ self
+ parse: '0x100000000L'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral5
+ self
+ parse: '2147483648L'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral6
+ self
+ parse: '0xC0B0L'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral7
+ self
+ parse: '2'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral8
+ self
+ parse: '0372'
+ rule: #integerLiteral
+!
+
+testIntegerLiteral9
+ self
+ parse: '0xDadaCafe'
+ rule: #integerLiteral
+!
+
+testOctalIntegerLiteral1
+ self
+ parse: '0777L'
+ rule: #octalIntegerLiteral
+!
+
+testOperator
+ self
+ parse: '>'
+ rule: #operator
+! !
+
+!PPJavaLexiconTest methodsFor:'testing-unicode'!
+
+testUnicodeEscape1
+
+ self
+ parse: '\u0000'
+ rule: #unicodeEscape
+!
+
+testUnicodeEscape2
+
+ self
+ fail: '\u000'
+ rule: #unicodeEscape
+!
+
+testUnicodeEscape3
+
+ self
+ fail: '\u00000'
+ rule: #unicodeEscape
+!
+
+testUnicodeInputCharacter1
+
+ self
+ parse: '\u0000'
+ rule: #unicodeInputCharacter
+!
+
+testUnicodeInputCharacter2
+
+ self
+ parse: '\'
+ rule: #unicodeInputCharacter
+!
+
+testUnicodeInputCharacter3
+
+ self
+ parse: 'µ'
+ rule: #unicodeInputCharacter
+!
+
+testUnicodeInputCharacter4
+
+ self
+ fail: '\\'
+ rule: #unicodeInputCharacter
+!
+
+testUnicodeInputCharacter5
+ self
+ parse: '\u2297'
+ rule: #unicodeInputCharacter
+!
+
+testUnicodeInputCharacter6
+ self
+ fail: '\u2H97'
+ rule: #unicodeInputCharacter
+!
+
+testUnicodeInputCharacter7
+"unicode value for \"
+ self
+ parse: '\u005a'
+ rule: #unicodeInputCharacter
+!
+
+testWhiteSpace1
+"Testing whiteSpace parser"
+ self
+ parse: (Character value: 12) asString
+ rule: #whiteSpace
+!
+
+testWhiteSpace2
+"Testing whiteSpace parser"
+ self
+ fail: 'WhiteSpace testing'
+ rule: #whiteSpace
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaParser.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,376 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPJavaSyntax subclass:#PPJavaParser
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Core'
+!
+
+PPJavaParser comment:'A parser which creates an AST upor parsing the code'
+!
+
+!PPJavaParser methodsFor:'accessing'!
+
+annotation
+
+ ^ super annotation ==> [:nodes | PJAnnotationNode typeName: nodes second]
+!
+
+classModifierNotAnnotation
+
+ ^super classModifierNotAnnotation ==> [:tokenKeyword | PJModifierNode keyword: tokenKeyword inputValue]
+!
+
+formalParameters
+
+ ^ super formalParameters ==> [:nodes | nodes second]
+!
+
+methodModifierNotAnnotation
+
+ ^super methodModifierNotAnnotation ==> [:tokenKeyword | PJModifierNode keyword: tokenKeyword inputValue]
+!
+
+qualifiedName
+ ^ super qualifiedName
+ ==> [ :nodes |
+ nodes second notEmpty
+ ifTrue: [ self nameFromQualified: (Array with: nodes first withAll: (nodes second collect: [ :e | e second value ])) ]
+ ifFalse: [ PJSimpleNameNode identifier: nodes first value ] ]
+! !
+
+!PPJavaParser methodsFor:'as yet unclassified'!
+
+endOfLineComment
+^ super endOfLineComment ==> [ :nodes | PJEndOfLineCommentsNode comment: nodes second .].
+!
+
+floatingPointLiteral
+
+ ^super floatingPointLiteral trim ==> [ :token | PJFloatLiteralNode newFrom: token inputValue ]
+!
+
+separator
+
+ ^super separator trim ==> [:token | PJSeparatorNode separatorValue: (token inputValue)]
+!
+
+traditionalComment
+^ super traditionalComment ==> [ :nodes | PJTraditionalCommentsNode comment: (nodes second ).].
+! !
+
+!PPJavaParser methodsFor:'grammar-classes'!
+
+normalClassDeclaration
+
+ ^ super normalClassDeclaration
+! !
+
+!PPJavaParser methodsFor:'grammar-classes-method'!
+
+block
+ ^ super block ==> [ :nodes |
+ | blockNode |
+ blockNode := PJBlockNode new.
+ blockNode statements: nodes second.
+ blockNode]
+!
+
+constructorDeclaration
+
+ ^ super constructorDeclaration ==> [:nodes |
+ |constructor|
+
+ constructor := PJConstructorDeclarationNode named: nodes third name.
+ constructor
+ statements: nodes eighth;
+ modifiers: nodes first;
+ returnType: nodes second;
+ parameters: nodes fourth.
+ constructor]
+!
+
+expressionStatement
+ ^ super expressionStatement ==> [ :nodes |
+ | expressionStatementNode |
+ expressionStatementNode := PJExpressionStatementNode new.
+ expressionStatementNode expression: nodes first.
+ expressionStatementNode]
+!
+
+localVariableDeclaration
+ ^ super localVariableDeclaration ==> [ :nodes |
+ | declarationNode |
+ declarationNode := PJLocalVariableDeclarationStatementNode new.
+ declarationNode
+ type: nodes second;
+ declarators: (nodes third second collect: [:each | each second]) asOrderedCollection.
+ declarationNode declarators addFirst: nodes third first.
+ declarationNode]
+!
+
+localVariableDeclarationStatement
+ ^ super localVariableDeclarationStatement ==> [ :nodes | nodes first]
+!
+
+methodNotConstructorDeclaration
+
+ ^ super methodNotConstructorDeclaration ==> [:nodes |
+ | methodDeclarationNode |
+ methodDeclarationNode := PJMethodDeclarationNode named: nodes fourth name.
+ methodDeclarationNode modifiers: nodes first.
+ methodDeclarationNode returnType: nodes third.
+ methodDeclarationNode body: nodes eighth.
+ methodDeclarationNode parameters: nodes fifth.
+ methodDeclarationNode
+
+ ]
+!
+
+normalParameterDecl
+
+ ^ super normalParameterDecl ==> [:nodes |
+ | declarator |
+
+ declarator := PJParameterDeclaratorNode new.
+ declarator
+ modifiers: nodes first;
+ type: nodes second;
+ identifier: nodes third;
+ arrayLevel: nodes fourth size.
+ declarator]
+!
+
+normalParametersDecls
+ ^ super normalParametersDecls ==> [ :nodes |
+ | declarationNode |
+ ((nodes second collect: [ :element | element second ]) asOrderedCollection)
+ addFirst: nodes first; yourself]
+!
+
+nullLiteral
+ ^super nullLiteral trim ==> [:token | PJNullLiteralNode literalValue: (token inputValue)]
+!
+
+returnStatement
+ ^ super returnStatement ==> [ :nodes |
+ | returnNode |
+ returnNode := PJReturnStatementNode new.
+ returnNode expression: nodes second.
+ returnNode]
+!
+
+variableDeclarator
+
+ ^ super variableDeclarator ==> [:nodes |
+ | declarator |
+
+ declarator := PJVariableDeclaratorNode new.
+ declarator
+ variable: nodes first;
+ arrayLevel: nodes second size.
+ nodes third ifNotNilDo: [:node | declarator initializer: node second].
+ declarator]
+! !
+
+!PPJavaParser methodsFor:'grammar-literals-boolean'!
+
+booleanLiteral
+
+ ^ super booleanLiteral trim ==> [:token |
+ | value |
+ (token inputValue = 'false')
+ ifTrue: [ value := false]
+ ifFalse: [(token inputValue = 'true')
+ ifTrue: [value := true]
+ ifFalse: [self error: 'A Boolean Literal must be either false or true']].
+ PJBooleanLiteralNode booleanValue: value.]
+! !
+
+!PPJavaParser methodsFor:'grammar-literals-string'!
+
+additiveExpression
+
+ ^ super additiveExpression ==> self infixOpProcessor .
+!
+
+andExpression
+
+ ^ super andExpression ==> self infixOpProcessor
+!
+
+characterLiteral
+ ^super characterLiteral trim ==> [:token | PJCharacterLiteralNode literalValue: (token inputValue allButFirst allButLast)]
+!
+
+classOrInterfaceType
+ self flag: 'NA: temporary hack, should interpret nodes instead of returning first'.
+ ^ super classOrInterfaceType ==> [ :nodes | nodes first ]
+!
+
+conditionalAndExpression
+
+ ^ super conditionalAndExpression ==> self infixOpProcessor
+!
+
+conditionalExpression
+
+ ^super conditionalExpression ==> [:node | node second ifNil: [node first] ifNotNil: [node]]
+!
+
+conditionalOrExpression
+
+ ^ super conditionalOrExpression ==> self infixOpProcessor
+!
+
+equalityExpression
+
+ ^ super equalityExpression ==> self infixOpProcessor
+!
+
+exclusiveOrExpression
+
+ ^ super exclusiveOrExpression ==> self infixOpProcessor
+!
+
+expression
+
+ ^super expression ==> [:node | node second ifNil: [node first] ifNotNil: [
+ |operation|
+ operation := PJInfixOperationNode new.
+ operation
+ left: node first;
+ operator: node second first inputValue asSymbol;
+ right: node second second.
+ operation]]
+!
+
+identifier
+
+ ^super identifier ==> [:token | PJIdentifierNode newWithName: token inputValue]
+!
+
+identifierWithAccessors
+
+ ^ super identifierWithAccessors ==> [:node | node second isEmpty & node third isNil ifTrue: [node first] ifFalse: [node]]
+!
+
+ifStatement
+
+ ^super ifStatement ==> [:node |
+ | statementNode |
+ statementNode := PJIfStatementNode new.
+ statementNode
+ condition: node second;
+ thenPart: node third.
+ node fourth ifNotNil: [
+ statementNode elsePart: node fourth second].
+ statementNode]
+!
+
+inclusiveOrExpression
+
+ ^super inclusiveOrExpression ==> self infixOpProcessor
+!
+
+infixOpProcessor
+
+ ^ [:node |
+ (node second asOrderedCollection addFirst: node first; yourself) fold: [:left :current |
+ |operation|
+ operation := PJInfixOperationNode new.
+ operation
+ left: left;
+ operator: current first inputValue asSymbol;
+ right: current second.
+ operation]]
+!
+
+instanceofExpression
+
+ ^super instanceofExpression ==> [:node | node second ifNil: [node first] ifNotNil: [node]]
+!
+
+integerLiteral
+
+ ^super integerLiteral trim ==> [ :token | PJIntegerLiteralNode newFrom: token inputValue ]
+!
+
+multiplicativeExpression
+ ^ super multiplicativeExpression ==> self infixOpProcessor
+!
+
+parExpression
+
+ ^super parExpression ==> [ :nodes | nodes second ]
+!
+
+primaryWithselectors
+ ^ super primaryWithselectors ==> [:node |
+ "JK: I have no idea, what this fold is supposed to do,
+ but #object: causes DNU, so I commented it out
+ "
+ node first ]
+ "(node second asOrderedCollection addFirst: node first; yourself) fold: [:inner :outer | outer object: inner]]
+ "
+!
+
+primitiveType
+
+ ^super primitiveType ==> [:token | PJPrimitiveTypeNode type: token inputValue]
+!
+
+relationalExpression
+
+ ^super relationalExpression ==> self infixOpProcessor
+!
+
+shiftExpression
+
+ ^super shiftExpression ==> [:node | node second ifEmpty: [node first] ifNotEmpty: [node]]
+!
+
+stringLiteral
+
+ ^super stringLiteral trim ==> [:token | PJStringLiteralNode literalValue: (token inputValue allButFirst allButLast)]
+!
+
+type
+ ^ super type
+ ==> [ :nodes |
+ | pjtype |
+ nodes second notEmpty
+ ifTrue: [ pjtype := PJArrayTypeNode elementType: nodes first dimensions: nodes second size ]
+ ifFalse: [ pjtype := nodes first ].
+ pjtype ]
+!
+
+unaryPostfixExpression
+ ^ super unaryPostfixExpression ==> [:node | node second ifNil: [node first] ifNotNil: [node]]
+!
+
+whileStatement
+
+ ^super whileStatement ==> [ :nodes |
+ | while |
+ while := PJWhileStatementNode new.
+ while expression: nodes second.
+ while statement: nodes third.
+ while ]
+! !
+
+!PPJavaParser methodsFor:'private'!
+
+nameFromQualified: aCollection
+
+ ^(aCollection size = 1)
+ ifTrue: [PJSimpleNameNode identifier: aCollection first]
+ ifFalse: [
+ PJQualifiedNameNode
+ name: (PJSimpleNameNode identifier: aCollection last)
+ qualifier: (self nameFromQualified: aCollection allButLast ).]
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaParserTest.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,733 @@
+"{ Encoding: utf8 }"
+
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPJavaSyntaxTest subclass:#PPJavaParserTest
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Tests'
+!
+
+PPJavaParserTest comment:''
+!
+
+!PPJavaParserTest methodsFor:'accessing'!
+
+parserClass
+ ^ PPJavaParser
+! !
+
+!PPJavaParserTest methodsFor:'as yet unclassified'!
+
+testCharacterLiteral1
+ super testCharacterLiteral1.
+ self assert: result class equals: PJCharacterLiteralNode.
+ self assert: result literalValue equals: 'a'
+!
+
+testCharacterLiteral2
+ super testCharacterLiteral2.
+ self assert: result class equals: PJCharacterLiteralNode.
+ self assert: result literalValue equals: '%'
+!
+
+testCharacterLiteral3
+ super testCharacterLiteral3.
+ self assert: result class equals: PJCharacterLiteralNode.
+ self assert: result literalValue equals: '\t'
+!
+
+testCharacterLiteral4
+ super testCharacterLiteral4.
+ self assert: result class equals: PJCharacterLiteralNode.
+ self assert: result literalValue equals: '\\'
+!
+
+testCharacterLiteral5
+ super testCharacterLiteral5.
+ self assert: result class equals: PJCharacterLiteralNode.
+ self assert: result literalValue equals: '\'''
+!
+
+testCharacterLiteral8
+ super testCharacterLiteral8.
+ self assert: result class equals: PJCharacterLiteralNode.
+ self assert: result literalValue equals: '\177'
+!
+
+testComment1
+ super testComment1.
+ self assert: result class equals: PJEndOfLineCommentsNode.
+ self assert: (result comment ) equals: '' .
+!
+
+testComment2
+ super testComment2.
+ self assert: result class equals: PJEndOfLineCommentsNode.
+ self assert: (result comment ) equals: 'comment' .
+
+
+!
+
+testComment3
+ super testComment3.
+ self assert: result class equals: PJEndOfLineCommentsNode .
+ self assert: (result comment ) equals: ' comment' .
+!
+
+testComment4
+ super testComment4.
+ self assert: result class equals: PJTraditionalCommentsNode.
+ self assert: (result comment) equals: ' comment ' .
+!
+
+testComment6
+ super testComment6.
+ self assert: result class equals: PJTraditionalCommentsNode.
+ self assert: (result comment) equals: ' this comment /* // /** ends here: ' .
+
+!
+
+testComment7
+ super testComment7.
+ self assert: result class equals: PJTraditionalCommentsNode .
+ self assert: (result comment) equals: '* * @param args * @return void '.
+!
+
+testSeparator1
+super testSeparator1.
+ self assert: result class equals: PJSeparatorNode .
+ self assert: result separatorValue equals: '{' .
+! !
+
+!PPJavaParserTest methodsFor:'testing'!
+
+testBlock1
+ super testBlock1.
+ self assert: result class equals: PJBlockNode.
+ self assert: result statements isEmpty
+!
+
+testBlock2
+ super testBlock2.
+ self assert: result class equals: PJBlockNode.
+ self assert: result statements size equals: 2
+!
+
+testFloatLiteral1
+ super testFloatLiteral1.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '1e1'.
+ self assert: result isFloat
+!
+
+testFloatLiteral10
+ super testFloatLiteral10.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '0.0'.
+ self assert: result isFloat not.
+!
+
+testFloatLiteral11
+ super testFloatLiteral11.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '3.14'.
+ self assert: result isFloat not.
+!
+
+testFloatLiteral12
+ super testFloatLiteral12.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '1e-9d'.
+ self assert: result isFloat not.
+!
+
+testFloatLiteral13
+ super testFloatLiteral13.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '1e137'.
+ self assert: result isFloat not.
+!
+
+testFloatLiteral2
+ super testFloatLiteral2.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '2.'.
+ self assert: result isFloat
+!
+
+testFloatLiteral3
+ super testFloatLiteral3.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '.3'.
+ self assert: result isFloat
+!
+
+testFloatLiteral4
+ super testFloatLiteral4.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '0'.
+ self assert: result isFloat
+!
+
+testFloatLiteral5
+ super testFloatLiteral5.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '3.14'.
+ self assert: result isFloat
+!
+
+testFloatLiteral6
+ super testFloatLiteral6.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '6.022137e+23'.
+ self assert: result isFloat
+!
+
+testFloatLiteral7
+ super testFloatLiteral7.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '1e1'.
+ self assert: result isFloat not.
+!
+
+testFloatLiteral8
+ super testFloatLiteral8.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '2.'.
+ self assert: result isFloat not.
+!
+
+testFloatLiteral9
+ super testFloatLiteral9.
+ self assert: result class equals: PJFloatLiteralNode.
+ self assert: result literalValue equals: '.3'.
+ self assert: result isFloat not.
+!
+
+testMethodDeclaration3
+ super testMethodDeclaration3.
+ self assert: result class equals: PJMethodDeclarationNode.
+ self assert: result body class equals: PJBlockNode
+!
+
+testMethodDeclaration4
+ super testMethodDeclaration4.
+ self assert: result class equals: PJMethodDeclarationNode.
+ self assert: result body class equals: PJBlockNode.
+ self assert: result parameters size equals: 2
+!
+
+testNormalParameterDecl1
+ super testNormalParameterDecl1.
+ self assert: result class equals: PJParameterDeclaratorNode.
+ self assert: result identifier class equals: PJIdentifierNode.
+ self assert: result arrayLevel equals: 1.
+ self assert: result modifiers size equals: 1
+!
+
+testNormalParameterDecl2
+ super testNormalParameterDecl2.
+ self assert: result class equals: PJParameterDeclaratorNode.
+ self assert: result identifier class equals: PJIdentifierNode.
+ self assert: result arrayLevel equals: 0.
+ self assert: result modifiers size equals: 0
+!
+
+testStatement1
+ super testStatement1.
+ self assert: result class equals: PJExpressionStatementNode
+!
+
+testStatement3
+ super testStatement3.
+ self assert: result class equals: PJBlockNode.
+ self assert: result statements isEmpty
+!
+
+testWhileStatement1
+ super testWhileStatement1.
+ self assert: result class equals: PJWhileStatementNode.
+ self assert: result expression class equals: PJBooleanLiteralNode.
+!
+
+testWhileStatement2
+ super testWhileStatement2.
+ self assert: result class equals: PJWhileStatementNode.
+ self assert: result statement class equals: PJBlockNode
+! !
+
+!PPJavaParserTest methodsFor:'testing-classes'!
+
+testLiteral13
+ super testLiteral13.
+ self assert: result class equals: PJStringLiteralNode
+!
+
+testMethodDeclaration1
+ super testMethodDeclaration1.
+ self assert: result class equals: PJMethodDeclarationNode.
+ self assert: result body class equals: PJBlockNode
+!
+
+testMethodDeclaration2
+ super testMethodDeclaration2.
+ self assert: result class equals: PJConstructorDeclarationNode.
+ self assert: result statements isEmpty
+! !
+
+!PPJavaParserTest methodsFor:'testing-literals'!
+
+testAdditiveExpression1
+ super testAdditiveExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testAdditiveExpression2
+ super testAdditiveExpression2.
+ self assert: result class equals: PJInfixOperationNode.
+ self assert: result left class equals: PJIntegerLiteralNode.
+ self assert: result left literalValue equals: 3.
+ self assert: result operator equals: #+.
+ self assert: result right class equals: PJIntegerLiteralNode.
+ self assert: result right literalValue equals: 5.
+!
+
+testAdditiveExpression3
+ super testAdditiveExpression3.
+ self assert: result class equals: PJInfixOperationNode.
+
+ self assert: result left left left class equals: PJIntegerLiteralNode.
+ self assert: result left left left literalValue equals: 4.
+
+ self assert: result left left right class equals: PJIntegerLiteralNode.
+ self assert: result left left right literalValue equals: 8.
+ self assert: result left left operator equals: #+.
+
+ self assert: result left right class equals: PJIntegerLiteralNode.
+ self assert: result left right literalValue equals: 2.
+ self assert: result left operator equals: #-.
+
+ self assert: result right class equals: PJIntegerLiteralNode.
+ self assert: result right literalValue equals: 9.
+ self assert: result operator equals: #+.
+
+!
+
+testAndExpression1
+ super testAndExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testBooleanLiteral1
+ super testBooleanLiteral1.
+ self assert: result class equals: PJBooleanLiteralNode.
+ self assert: result booleanValue equals: true
+!
+
+testBooleanLiteral2
+ super testBooleanLiteral2.
+ self assert: result class equals: PJBooleanLiteralNode.
+ self assert: result booleanValue equals: false
+!
+
+testConditionalAndExpression1
+ super testConditionalAndExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testConditionalOrExpression1
+ super testConditionalOrExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testEqualityExpression1
+ super testEqualityExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testExclusiveOrExpression1
+ super testExclusiveOrExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testExpression2
+ super testExpression2.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testExpression4
+ super testExpression4.
+ self assert: result class equals: PJIdentifierNode
+!
+
+testExpression5
+ super testExpression5.
+ self assert: result class equals: PJInfixOperationNode.
+ self assert: result left class equals: PJIdentifierNode.
+ self assert: result operator equals: #+=.
+ self assert: result right class equals: PJIntegerLiteralNode
+!
+
+testFormalParameters1
+ super testFormalParameters1.
+ self assert: (result isKindOf: Collection).
+ self assert: result size equals: 2
+!
+
+testFormalParameters4
+ super testFormalParameters4.
+ self assert: (result isKindOf: Collection).
+ self assert: result size equals: 4
+!
+
+testFormalParameters5
+ super testFormalParameters5.
+ self assert: result isNil
+!
+
+testIdentifier1
+ super testIdentifier1.
+ self assert: result class equals: PJIdentifierNode.
+ self assert: result name equals: 'String'
+
+!
+
+testIdentifier2
+ super testIdentifier2.
+ self assert: result class equals: PJIdentifierNode.
+ self assert: result name equals: 'i3'
+
+!
+
+testIdentifier3
+ super testIdentifier3.
+ self assert: result class equals: PJIdentifierNode.
+ self assert: result name equals: 'αρετη'
+
+!
+
+testIdentifier4
+ super testIdentifier4.
+ self assert: result class equals: PJIdentifierNode.
+ self assert: result name equals: 'MAX_VALUE'
+
+!
+
+testIdentifier5
+ super testIdentifier5.
+ self assert: result class equals: PJIdentifierNode.
+ self assert: result name equals: 'isLetterOrDigit'
+!
+
+testInclusiveOrExpression1
+ super testInclusiveOrExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testInstanceofExpression1
+ super testInstanceofExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testLiteral2
+ super testLiteral2.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testLocalVariableDeclarationStatement1
+ super testLocalVariableDeclarationStatement1.
+ self assert: result class equals: PJLocalVariableDeclarationStatementNode.
+ self assert: result type notNil.
+ self assert: result declarators size equals: 1.
+!
+
+testLocalVariableDeclarationStatement2
+ super testLocalVariableDeclarationStatement2.
+ self assert: result class equals: PJLocalVariableDeclarationStatementNode.
+ self assert: result type notNil.
+ self assert: result declarators size equals: 2.
+!
+
+testLocalVariableDeclarationStatement3
+ super testLocalVariableDeclarationStatement3.
+ self assert: result class equals: PJLocalVariableDeclarationStatementNode.
+ self assert: result type notNil.
+ self assert: result declarators size equals: 3.
+!
+
+testMultiplicativeExpression1
+ super testMultiplicativeExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testMultiplicativeExpression2
+ super testMultiplicativeExpression2.
+ self assert: result class equals: PJInfixOperationNode.
+ self assert: result left class equals: PJIntegerLiteralNode.
+ self assert: result left literalValue equals: 3.
+ self assert: result operator equals: #*.
+ self assert: result right class equals: PJIntegerLiteralNode.
+ self assert: result right literalValue equals: 5.
+!
+
+testMultiplicativeExpression3
+ super testMultiplicativeExpression3.
+ self assert: result class equals: PJInfixOperationNode.
+
+ self assert: result left left left class equals: PJIntegerLiteralNode.
+ self assert: result left left left literalValue equals: 4.
+
+ self assert: result left left right class equals: PJIntegerLiteralNode.
+ self assert: result left left right literalValue equals: 8.
+ self assert: result left left operator equals: #*.
+
+ self assert: result left right class equals: PJIntegerLiteralNode.
+ self assert: result left right literalValue equals: 2.
+ self assert: result left operator equals: #/.
+
+ self assert: result right class equals: PJIntegerLiteralNode.
+ self assert: result right literalValue equals: 9.
+ self assert: result operator equals: #*.
+
+!
+
+testNullLiteral1
+
+ super testNullLiteral1
+.
+ self assert: result class equals: PJNullLiteralNode .
+ self assert: result literalValue equals: 'null'
+!
+
+testPrimary1
+ super testPrimary1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testPrimary2
+ super testPrimary2.
+ self assert: result class equals: PJStringLiteralNode
+!
+
+testPrimaryWithselectors1
+ super testPrimaryWithselectors1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testPrimaryWithselectors2
+ super testPrimaryWithselectors2.
+ "
+ JK: Seems the functionality is not finished or broken
+ see rule primaryWithselectors, calling #object: that throws DNU
+ "
+ "self assert: result size = 2."
+!
+
+testRelationalExpression1
+ super testRelationalExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testRelationalExpression2
+ super testRelationalExpression2.
+ self assert: result class equals: PJInfixOperationNode
+!
+
+testReturnStatement1
+ super testReturnStatement1.
+ self assert: result class equals: PJReturnStatementNode.
+ self assert: (result expression isKindOf: PJExpressionNode)
+!
+
+testReturnStatement2
+ super testReturnStatement2.
+ self assert: result class equals: PJReturnStatementNode.
+ self assert: result expression isNil
+!
+
+testShiftExpression1
+ super testShiftExpression1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testStringLiteral1
+ super testStringLiteral1.
+ self assert: result class equals: PJStringLiteralNode.
+ self assert: result literalValue equals: String empty
+!
+
+testStringLiteral11
+ super testStringLiteral11.
+ self assert: result class equals: PJStringLiteralNode.
+ self assert: result literalValue equals: 'null'
+!
+
+testStringLiteral2
+ super testStringLiteral2.
+ self assert: result class equals: PJStringLiteralNode.
+ self assert: result literalValue equals: '\"'
+!
+
+testStringLiteral3
+ super testStringLiteral3.
+ self assert: result class equals: PJStringLiteralNode.
+ self assert: result literalValue equals: 'This is a Java string'
+!
+
+testUnaryExpression2
+ super testUnaryExpression2.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testUnaryExpressionNotPlusMinus1
+ super testUnaryExpressionNotPlusMinus1.
+ self assert: result class equals: PJBooleanLiteralNode
+!
+
+testVariableDeclarator1
+ super testVariableDeclarator1.
+ self assert: result class equals: PJVariableDeclaratorNode.
+ self assert: result variable class equals: PJIdentifierNode.
+ self assert: result arrayLevel equals: 0.
+ self assert: result initializer isNil
+!
+
+testVariableDeclarator2
+ super testVariableDeclarator2.
+ self assert: result class equals: PJVariableDeclaratorNode.
+ self assert: result variable class equals: PJIdentifierNode.
+ self assert: result arrayLevel equals: 2.
+ self assert: result initializer isNil
+!
+
+testVariableDeclarator3
+ super testVariableDeclarator3.
+ self assert: result class equals: PJVariableDeclaratorNode.
+ self assert: result variable class equals: PJIdentifierNode.
+ self assert: result arrayLevel equals: 0.
+ self assert: result initializer notNil
+! !
+
+!PPJavaParserTest methodsFor:'testing-literals-integer'!
+
+testIfStatement1
+ super testIfStatement1.
+ self assert: result class equals: PJIfStatementNode.
+ self assert: result condition class equals: PJBooleanLiteralNode.
+ self assert: result thenPart class equals: PJBlockNode.
+ self assert: result elsePart isNil
+!
+
+testIfStatement2
+ super testIfStatement2.
+ self assert: result class equals: PJIfStatementNode.
+ self assert: result condition class equals: PJBooleanLiteralNode.
+ self assert: result thenPart class equals: PJBlockNode.
+ self assert: result elsePart class equals: PJBlockNode.
+!
+
+testIfStatement3
+ super testIfStatement3.
+ self assert: result class equals: PJIfStatementNode.
+ self assert: result condition class equals: PJBooleanLiteralNode.
+ self assert: result thenPart class equals: PJBlockNode.
+ self assert: result elsePart class equals: PJBlockNode.
+!
+
+testIfStatement4
+ super testIfStatement4.
+ self assert: result class equals: PJIfStatementNode.
+ self assert: result condition class equals: PJBooleanLiteralNode.
+ self assert: result thenPart class equals: PJExpressionStatementNode.
+ self assert: result elsePart isNil
+!
+
+testIfStatement5
+ super testIfStatement5.
+ self assert: result class equals: PJIfStatementNode.
+ self assert: result condition class equals: PJInfixOperationNode.
+ self assert: result thenPart class equals: PJBlockNode.
+ self assert: result elsePart isNil
+!
+
+testIntegerLiteral1
+ super testIntegerLiteral1.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 0.
+ self assert: result isLong not
+!
+
+testIntegerLiteral10
+ super testIntegerLiteral10.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 1996.
+ self assert: result isLong not
+!
+
+testIntegerLiteral11
+ super testIntegerLiteral11.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 16711935.
+ self assert: result isLong not
+!
+
+testIntegerLiteral2
+ super testIntegerLiteral2.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 0.
+ self assert: result isLong
+!
+
+testIntegerLiteral3
+ super testIntegerLiteral3.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 511.
+ self assert: result isLong
+!
+
+testIntegerLiteral4
+ super testIntegerLiteral4.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 4294967296.
+ self assert: result isLong
+!
+
+testIntegerLiteral5
+ super testIntegerLiteral5.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 2147483648.
+ self assert: result isLong
+!
+
+testIntegerLiteral6
+ super testIntegerLiteral6.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 49328.
+ self assert: result isLong
+!
+
+testIntegerLiteral7
+ super testIntegerLiteral7.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 2.
+ self assert: result isLong not
+!
+
+testIntegerLiteral8
+ super testIntegerLiteral8.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 250.
+ self assert: result isLong not
+!
+
+testIntegerLiteral9
+ super testIntegerLiteral9.
+ self assert: result class equals: PJIntegerLiteralNode.
+ self assert: result literalValue equals: 3671771902.
+ self assert: result isLong not
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaSyntax.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,1119 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPJavaLexicon subclass:#PPJavaSyntax
+ instanceVariableNames:'compilationUnit annotations packageDeclaration importDeclaration
+ typeDeclaration qualifiedName annotation
+ classOrInterfaceDeclaration classDeclaration interfaceDeclaration
+ normalClassDeclaration enumDeclaration classModifiers
+ typeParameters type typeList classBody jsuper interfaces
+ typeParameter typeBound enumBody enumConstants
+ enumBodyDeclarations enumConstant arguments classBodyDeclaration
+ normalInterfaceDeclaration annotationTypeDeclaration
+ interfaceModifiers interfaceBody interfaceBodyDeclaration block
+ fieldDeclaration methodDeclaration methodModifiers
+ formalParameters throws qualifiedNameList
+ explicitConstructorInvocation blockStatement fieldModifiers
+ variableDeclarators variableDeclarator variableInitializer
+ interfaceFieldDeclaration interfaceMethodDeclaration
+ classOrInterfaceType primitiveType typeArguments typeArgument
+ formalParameterDecls ellipsisParameterDecl normalParameterDecl
+ variableModifiers nonWildcardTypeArguments primary
+ elementValuePairs elementValue elementValuePair
+ conditionalExpression elementValueArrayInitializer
+ annotationTypeBody annotationTypeElementDeclaration
+ annotationMethodDeclaration localVariableDeclarationStatement
+ statement localVariableDeclaration expression parExpression
+ ifStatement assertStatement basicForStatement
+ enhancedForStatement forInit expressionList forStatement
+ whileStatement catches catchClause formalParameter doStatement
+ tryStatement switchBlockStatementGroup switchLabel
+ switchStatement synchronizedStatement returnStatement
+ throwStatement breakStatement continueStatement
+ expressionStatement labeledStatement emptyStatement
+ assignmentOperator conditionalOrExpression
+ conditionalAndExpression inclusiveOrExpression
+ exclusiveOrExpression andExpression equalityExpression
+ instanceofExpression relationalExpression shiftExpression
+ relationalOperator additiveExpression shiftOperator
+ multiplicativeExpression unaryExpression
+ unaryExpressionNotPlusMinus castExpression selector innerCreator
+ superSuffix identifierSuffix creator classCreatorRest
+ arrayCreator createdName arrayInitializer constructorDeclaration
+ constructorModifiers methodNotConstructorDeclaration wildcard
+ emptySquaredParenthesis methodModifierNotAnnotation
+ classModifierNotAnnotation unaryNegationExpression
+ unaryPostfixExpression primaryWithselectors
+ startMethodDeclaration identifierWithAccessors
+ normalParametersWithElipsisDecls normalParametersDecls
+ blockStatements statementWithoutTrailingSubstatement integralType
+ floatingPointType numericType finally'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Core'
+!
+
+PPJavaSyntax comment:'Parses Java code into lots of arrays. This parser has a full java gramar coverage'
+!
+
+!PPJavaSyntax class methodsFor:'as yet unclassified'!
+
+parseMethod: aString
+ ^ self new parseMethod: aString
+!
+
+parseMethod: aString onError: aBlock
+ ^ self new parseMethod: aString onError: aBlock
+! !
+
+!PPJavaSyntax methodsFor:'accessing'!
+
+start
+ "Default start production."
+
+ ^ compilationUnit end
+! !
+
+!PPJavaSyntax methodsFor:'as yet unclassified'!
+
+fieldAccessExpression
+
+
+ ^(
+" Primary.Identifier"
+ (primary , (self tokenFor: '.'), identifier)
+"Super.Identifier"
+ /((self tokenFor: 'super'), superSuffix )
+"ClassName.super.Identifier"
+ /(identifier,(self tokenFor: '.'),(self tokenFor: 'super'),superSuffix)
+ )plus.
+!
+
+finally
+^ ((self tokenFor: 'finally'), block).
+!
+
+integralType
+ ^ (self tokenFor: 'byte')
+ / (self tokenFor: 'short')
+ / (self tokenFor: 'int')
+ / (self tokenFor: 'long')
+ / (self tokenFor: 'char')
+! !
+
+!PPJavaSyntax methodsFor:'grammar'!
+
+arguments
+
+ ^(self tokenFor: '('),
+ expressionList optional,
+ (self tokenFor: ')')
+!
+
+arrayCreator
+
+ ^ ( (self tokenFor: 'new') , createdName ,
+ emptySquaredParenthesis plus,
+ arrayInitializer)
+
+ /( (self tokenFor: 'new'), createdName ,
+ ((self tokenFor: '['), expression , (self tokenFor: ']')) plus,
+ emptySquaredParenthesis star)
+!
+
+arrayInitializer
+
+ ^ (self tokenFor: '{'),
+ (variableInitializer , ((self tokenFor: ','), variableInitializer ) star) optional,
+ (self tokenFor: ',') optional,
+ (self tokenFor: '}')
+!
+
+block
+
+ ^ (self tokenFor: '{') ,
+ blockStatements,
+ (self tokenFor: '}')
+!
+
+classCreatorRest
+
+ ^ arguments , classBody optional
+!
+
+compilationUnit
+
+ ^ (annotations optional, packageDeclaration) optional , importDeclaration star , typeDeclaration plus
+!
+
+createdName
+
+ ^ classOrInterfaceType
+ / primitiveType
+!
+
+creator
+
+ ^ ( (self tokenFor: 'new'), nonWildcardTypeArguments optional , classOrInterfaceType , classCreatorRest)
+ / arrayCreator
+!
+
+elementValue
+
+ ^conditionalExpression
+ / annotation
+ / elementValueArrayInitializer
+!
+
+elementValueArrayInitializer
+
+ ^ (self tokenFor: '{') ,
+ (elementValue ,
+ ((self tokenFor: ',') , elementValue ) star
+ ) optional ,
+ ((self tokenFor: ',') optional ),
+ (self tokenFor: '}')
+!
+
+elementValuePair
+
+ ^ identifier , (self tokenFor: '=') , elementValue
+!
+
+elementValuePairs
+
+ ^ elementValuePair , ((self tokenFor: ',') , elementValuePair ) star
+!
+
+explicitConstructorInvocation
+
+ ^ (
+ ( nonWildcardTypeArguments optional,
+ ((self tokenFor: 'this') / (self tokenFor: 'super')))
+
+ / (primary ,
+ (self tokenFor: '.') ,
+ nonWildcardTypeArguments optional,
+ (self tokenFor: 'super'))) ,
+
+ arguments ,
+ (self tokenFor: ';')
+!
+
+identifierWithAccessors
+ ^ identifier,
+ ((self tokenFor: '.'), identifier ) star,
+ identifierSuffix optional
+!
+
+importDeclaration
+
+^ ((self tokenFor: 'import') , (self tokenFor: 'static') optional , identifier),
+ ( ( (self tokenFor: '.') , (self tokenFor: '*'))
+ /( ((self tokenFor: '.') , identifier) plus , ((self tokenFor: '.') , (self tokenFor: '*')) optional)
+ ),
+ (self tokenFor: ';')
+!
+
+innerCreator
+
+ ^ (self tokenFor: '.'), (self tokenFor: 'new'),
+ nonWildcardTypeArguments optional,
+ identifier ,
+ typeArguments optional,
+ classCreatorRest
+!
+
+interfaces
+
+ ^ (self tokenFor: 'implements') , typeList
+!
+
+jsuper
+
+ ^ (self tokenFor: 'extends') , type
+!
+
+nonWildcardTypeArguments
+
+ ^(self tokenFor: '<'),
+ typeList ,
+ (self tokenFor: '>')
+!
+
+packageDeclaration
+
+ ^ (self tokenFor: 'package') , qualifiedName , (self tokenFor: ';')
+!
+
+primary
+
+ ^ parExpression
+ /( (self tokenFor: 'this'),
+ ((self tokenFor: '.'), identifier ) star,
+ identifierSuffix optional)
+ / identifierWithAccessors
+ /( (self tokenFor: 'super'), superSuffix )
+ / literal
+ / creator
+ /( primitiveType,
+ emptySquaredParenthesis star,
+ (self tokenFor: '.'), (self tokenFor: 'class'))
+ /( (self tokenFor: 'void'), (self tokenFor: '.'), (self tokenFor: 'class'))
+
+!
+
+qualifiedName
+
+ ^ identifier , ((self tokenFor: '.'), identifier ) star
+!
+
+typeBound
+
+ ^ type , ((self tokenFor: '&') , type) star
+!
+
+typeDeclaration
+
+ ^ (self tokenFor: ';') / classOrInterfaceDeclaration
+!
+
+typeList
+
+ ^ type , ((self tokenFor: ','), type) star
+!
+
+typeParameter
+
+ ^ identifier , ((self tokenFor: 'extends') , typeBound) optional
+!
+
+typeParameters
+
+ ^ (self tokenFor: '<') ,
+ typeParameter ,
+ ((self tokenFor: ',') , typeParameter) star ,
+ (self tokenFor: '>')
+!
+
+unaryExpressionNotPlusMinus
+
+ ^ unaryNegationExpression
+ /castExpression
+ /unaryPostfixExpression
+!
+
+variableInitializer
+
+ ^ arrayInitializer
+ / expression
+! !
+
+!PPJavaSyntax methodsFor:'grammar-annotations'!
+
+annotation
+
+ ^(self tokenFor: '@') , qualifiedName ,
+ ((self tokenFor: '(') ,
+ (elementValuePairs / elementValue) optional ,
+ (self tokenFor: ')') ) optional
+!
+
+annotationMethodDeclaration
+ self flag: 'check whether method modifiers are the right modifiers to use'.
+
+ ^ methodModifiers ,
+ type ,
+ identifier ,
+ (self tokenFor: '('), (self tokenFor: ')'),
+ ((self tokenFor: 'default'), elementValue ) optional ,
+ (self tokenFor: ';')
+!
+
+annotationTypeBody
+
+ ^ (self tokenFor: '{') ,
+ (annotationTypeElementDeclaration star),
+ (self tokenFor: '}')
+!
+
+annotationTypeDeclaration
+
+ ^ interfaceModifiers , (self tokenFor: '@'),
+ (self tokenFor: 'interface') ,
+ identifier ,
+ annotationTypeBody
+!
+
+annotationTypeElementDeclaration
+
+ ^ annotationMethodDeclaration
+ / interfaceFieldDeclaration
+ / normalClassDeclaration
+ / enumDeclaration
+ / annotationTypeDeclaration
+ / (self tokenFor: ';')
+!
+
+annotations
+
+ ^ annotation plus
+! !
+
+!PPJavaSyntax methodsFor:'grammar-classes'!
+
+classBody
+
+ ^ (self tokenFor: '{') , classBodyDeclaration star , (self tokenFor: '}')
+!
+
+classBodyDeclaration
+
+ ^ (self tokenFor: ';')
+ / ((self tokenFor: 'static') optional , block)
+ / fieldDeclaration
+ / methodDeclaration
+ / classDeclaration
+ / interfaceDeclaration
+
+!
+
+classDeclaration
+
+ ^ normalClassDeclaration
+ / enumDeclaration
+!
+
+classOrInterfaceDeclaration
+
+ ^ classDeclaration
+ / interfaceDeclaration
+!
+
+classOrInterfaceType
+
+ ^ identifier ,
+ typeArguments optional,
+ ((self tokenFor: '.'), identifier , typeArguments optional ) star
+!
+
+ellipsisParameterDecl
+
+ ^ variableModifiers ,
+ type ,
+ ('...' asParser token trim) ,
+ identifier
+!
+
+fieldDeclaration
+
+ ^ fieldModifiers , type , variableDeclarators , (self tokenFor: ';')
+!
+
+fieldModifiers
+
+ ^ ((self tokenFor: 'volatile') /
+ (self tokenFor: 'final') /
+ (self tokenFor: 'protected') /
+ (self tokenFor: 'private') /
+ (self tokenFor: 'public') /
+ (self tokenFor: 'static') /
+ (self tokenFor: 'transient') /
+ annotation) star
+!
+
+floatingPointType
+ ^ (self tokenFor: 'float')
+ / (self tokenFor: 'double').
+
+!
+
+formalParameter
+
+ ^ variableModifiers ,
+ type ,
+ identifier ,
+ emptySquaredParenthesis star
+!
+
+formalParameterDecls
+
+ ^ ellipsisParameterDecl
+ / normalParametersWithElipsisDecls
+ / normalParametersDecls
+!
+
+formalParameters
+
+ ^ (self tokenFor: '(') ,
+ formalParameterDecls optional ,
+ (self tokenFor: ')')
+!
+
+normalClassDeclaration
+
+ ^ classModifiers , (self tokenFor: 'class') , identifier ,
+ typeParameters optional,
+ jsuper optional,
+ interfaces optional ,
+ classBody
+!
+
+normalParameterDecl
+
+ ^ variableModifiers ,
+ type ,
+ identifier ,
+ emptySquaredParenthesis star
+!
+
+normalParametersDecls
+
+ ^ normalParameterDecl ,
+ ((self tokenFor: ',') , normalParameterDecl) star
+!
+
+normalParametersWithElipsisDecls
+
+ ^ (normalParameterDecl ,
+ (self tokenFor: ',')) plus ,
+ ellipsisParameterDecl
+!
+
+numericType
+ ^ integralType / floatingPointType
+!
+
+primitiveType
+
+ ^ (self tokenFor: 'boolean') / numericType
+
+!
+
+type
+
+ ^ ( classOrInterfaceType
+ / primitiveType
+ ),
+ emptySquaredParenthesis star
+!
+
+typeArgument
+
+ ^ type
+ / wildcard
+!
+
+typeArguments
+
+ ^ (self tokenFor: '<') ,
+ (typeArgument , ((self tokenFor: ','), typeArgument) star ) ,
+ (self tokenFor: '>')
+!
+
+variableDeclarator
+
+ ^ identifier ,
+ ((self tokenFor: '[') , (self tokenFor: ']')) star ,
+ ((self tokenFor: '=') , variableInitializer) optional
+!
+
+variableDeclarators
+
+ ^ variableDeclarator , ((self tokenFor: ','), variableDeclarator) star
+!
+
+wildcard
+
+ ^ (self tokenFor: '?') ,
+ ( ((self tokenFor: 'extends')/(self tokenFor: 'super')),
+ type
+ ) optional
+! !
+
+!PPJavaSyntax methodsFor:'grammar-classes-enum'!
+
+enumBody
+
+ ^ (self tokenFor: '{') ,
+ enumConstants optional ,
+ (self tokenFor: ',') optional ,
+ enumBodyDeclarations optional ,
+ (self tokenFor: '}')
+!
+
+enumBodyDeclarations
+
+ ^ (self tokenFor: ';') , classBodyDeclaration star
+!
+
+enumConstant
+
+ ^ annotations optional , identifier , arguments optional , classBody optional
+!
+
+enumConstants
+
+ ^ enumConstant , ((self tokenFor: ',') , enumConstant) star
+!
+
+enumDeclaration
+
+ ^ classModifiers ,
+ (self tokenFor: 'enum'),
+ identifier ,
+ interfaces optional,
+ enumBody
+! !
+
+!PPJavaSyntax methodsFor:'grammar-classes-interface'!
+
+interfaceBody
+
+ ^ (self tokenFor: '{') , interfaceBodyDeclaration star , (self tokenFor: '}')
+!
+
+interfaceBodyDeclaration
+
+ ^ interfaceFieldDeclaration
+ / interfaceMethodDeclaration
+ / interfaceDeclaration
+ / classDeclaration
+ / (self tokenFor: ';')
+!
+
+interfaceDeclaration
+
+ ^normalInterfaceDeclaration
+ / annotationTypeDeclaration
+!
+
+interfaceFieldDeclaration
+
+ ^ fieldModifiers ,
+ type ,
+ variableDeclarators ,
+ (self tokenFor: ';')
+!
+
+interfaceMethodDeclaration
+
+ ^ methodModifiers ,
+ typeParameters optional,
+ ((self tokenFor: 'void') / type) ,
+ identifier ,
+ formalParameters ,
+ emptySquaredParenthesis star ,
+ throws optional ,
+ (self tokenFor: ';')
+!
+
+interfaceModifiers
+
+ ^ ((self tokenFor: 'abstract')
+ /(self tokenFor: 'protected')
+ /(self tokenFor: 'private')
+ /(self tokenFor: 'public')
+ /(self tokenFor: 'static')
+ /(self tokenFor: 'strictfp')
+ /annotation) star
+!
+
+normalInterfaceDeclaration
+
+ ^ interfaceModifiers ,
+ (self tokenFor: 'interface') ,
+ identifier ,
+ typeParameters optional ,
+ ((self tokenFor: 'extends') , typeList ) optional ,
+ interfaceBody
+! !
+
+!PPJavaSyntax methodsFor:'grammar-classes-method'!
+
+constructorDeclaration
+
+ ^ constructorModifiers optional ,
+ typeParameters optional ,
+ identifier,
+ formalParameters ,
+ throws optional ,
+ (self tokenFor: '{' ) ,
+ explicitConstructorInvocation optional ,
+ blockStatement star ,
+ (self tokenFor: '}')
+
+!
+
+constructorModifiers
+
+ ^ ((self tokenFor: 'protected')
+ / (self tokenFor: 'private')
+ / (self tokenFor: 'public')
+ / annotation) plus
+!
+
+methodDeclaration
+
+ ^ constructorDeclaration
+ / methodNotConstructorDeclaration
+!
+
+methodModifierNotAnnotation
+
+ ^ (self tokenFor: 'abstract')
+ / (self tokenFor: 'final')
+ / (self tokenFor: 'native')
+ / (self tokenFor: 'protected')
+ / (self tokenFor: 'private')
+ / (self tokenFor: 'public')
+ / (self tokenFor: 'static')
+ / (self tokenFor: 'strictfp')
+ / (self tokenFor: 'synchronized')
+!
+
+methodModifiers
+
+ ^ ( methodModifierNotAnnotation
+ / annotation) star
+!
+
+methodNotConstructorDeclaration
+
+ ^ methodModifiers,
+ typeParameters optional,
+ ((self tokenFor: 'void') / type),
+ identifier,
+ formalParameters ,
+ emptySquaredParenthesis star ,
+ throws optional,
+ (block / (self tokenFor: ';'))
+!
+
+parseMethod: aString
+ ^ self parseMethod: aString onError: [ :msg :pos | self error: msg ]
+!
+
+parseMethod: aString onError: aBlock
+ ^ startMethodDeclaration parse: aString onError: aBlock
+!
+
+qualifiedNameList
+
+ ^ qualifiedName , ((self tokenFor: ',') , qualifiedName ) star
+!
+
+startMethodDeclaration
+
+ ^ methodDeclaration end
+!
+
+throws
+
+ ^ (self tokenFor: 'throws') , qualifiedNameList
+! !
+
+!PPJavaSyntax methodsFor:'grammar-expressions'!
+
+additiveExpression
+
+ ^ multiplicativeExpression ,
+ (( (self tokenFor: '+') / (self tokenFor: '-') ) , multiplicativeExpression ) star
+!
+
+andExpression
+
+ ^ equalityExpression , ((self tokenFor: '&') , equalityExpression) star
+!
+
+assignmentOperator
+
+ ^ (self tokenFor: '=')
+ / (self tokenFor: '>>>=')
+ / (self tokenFor: '>>=')
+ / (self tokenFor: '<<=')
+ / (self tokenFor: '&=')
+ / (self tokenFor: '^=')
+ / (self tokenFor: '|=')
+ / (self tokenFor: '-=')
+ / (self tokenFor: '+=')
+ / (self tokenFor: '%=')
+ / (self tokenFor: '/=')
+ / (self tokenFor: '*=')
+
+!
+
+castExpression
+
+ ^ ((self tokenFor: '('),
+ primitiveType ,
+ (self tokenFor: ')'), unaryExpression )
+
+ / ((self tokenFor: '('),
+ type,
+ (self tokenFor: ')'), unaryExpressionNotPlusMinus )
+!
+
+conditionalAndExpression
+
+ ^inclusiveOrExpression ,
+ ((self tokenFor: '&&'), inclusiveOrExpression ) star
+!
+
+conditionalExpression
+
+ ^conditionalOrExpression ,
+ ((self tokenFor: '?'), expression , (self tokenFor: ':'), conditionalExpression ) optional
+!
+
+conditionalOrExpression
+
+ ^conditionalAndExpression ,
+ ((self tokenFor: '||'), conditionalAndExpression ) star
+!
+
+equalityExpression
+
+ ^ instanceofExpression ,
+ (((self tokenFor: '!!=') / (self tokenFor: '==')) , instanceofExpression) star
+!
+
+exclusiveOrExpression
+
+ ^ andExpression , ((self tokenFor: '^') , andExpression) star
+!
+
+expression
+
+ ^ conditionalExpression ,
+ (assignmentOperator , expression) optional
+!
+
+identifierSuffix
+
+ ^ ( emptySquaredParenthesis plus , (self tokenFor: '.'), (self tokenFor: 'class'))
+ / (((self tokenFor: '[') , expression , (self tokenFor: ']')) plus)
+ / arguments
+ / ((self tokenFor: '.'),
+ ( (self tokenFor: 'class')
+ / (self tokenFor: 'this')
+ / ((self tokenFor: 'super'), arguments)
+ / (nonWildcardTypeArguments , identifier , arguments)))
+ / innerCreator
+!
+
+inclusiveOrExpression
+
+ ^ exclusiveOrExpression ,
+ ((self tokenFor: '|') , exclusiveOrExpression) star
+!
+
+instanceofExpression
+
+ ^ relationalExpression ,
+ ((self tokenFor: 'instanceof') , type) optional
+!
+
+multiplicativeExpression
+
+ ^ unaryExpression ,
+ (( (self tokenFor: '*')
+ / (self tokenFor: '/')
+ / (self tokenFor: '%') ) , unaryExpression ) star
+!
+
+parExpression
+
+ ^ (self tokenFor: '(') , expression , (self tokenFor: ')')
+!
+
+primaryWithselectors
+ ^ primary, selector star
+!
+
+relationalExpression
+
+ ^ shiftExpression ,
+ (relationalOperator , shiftExpression) star
+!
+
+relationalOperator
+
+ ^ (self tokenFor: '<=')
+ / (self tokenFor: '>=')
+ / (self tokenFor: '<')
+ / (self tokenFor: '>')
+!
+
+selector
+
+ ^ ( (self tokenFor: '.') , identifier, arguments optional )
+ /( (self tokenFor: '.'), (self tokenFor: 'this'))
+ /( (self tokenFor: '.'), (self tokenFor: 'super'), superSuffix)
+ / innerCreator
+ /( (self tokenFor: '['), expression , (self tokenFor: ']'))
+!
+
+shiftExpression
+
+ ^ additiveExpression,
+ (shiftOperator , additiveExpression) star
+!
+
+shiftOperator
+ self flag: 'maybe it should be detokenized, check the behavior with javac'.
+
+ ^ (self tokenFor: '<<')
+ / (self tokenFor: '>>>')
+ / (self tokenFor: '>>')
+!
+
+statementWithoutTrailingSubstatement
+
+ ^ (block/ emptyStatement/ expressionStatement/assertStatement/switchStatement/ doStatement/ breakStatement).
+!
+
+superSuffix
+
+ ^ arguments
+ / ( (self tokenFor: '.'), typeArguments optional ,
+ identifier ,
+ arguments optional)
+!
+
+unaryExpression
+
+ ^ (((self tokenFor: '++')
+ /(self tokenFor: '+')
+ /(self tokenFor: '--')
+ /(self tokenFor: '-')),
+ unaryExpression)
+ /unaryExpressionNotPlusMinus
+!
+
+unaryNegationExpression
+ ^ ((self tokenFor: '~') / (self tokenFor: '!!')), unaryExpression
+!
+
+unaryPostfixExpression
+ ^ primaryWithselectors,
+ ( (self tokenFor: '++')
+ /(self tokenFor: '--')) optional
+! !
+
+!PPJavaSyntax methodsFor:'grammar-modifiers'!
+
+classModifierNotAnnotation
+
+ ^ (self tokenFor: 'abstract')
+ / (self tokenFor: 'final')
+ / (self tokenFor: 'protected')
+ / (self tokenFor: 'private')
+ / (self tokenFor: 'public')
+ / (self tokenFor: 'static')
+ / (self tokenFor: 'strictfp')
+
+!
+
+classModifiers
+
+ ^ (classModifierNotAnnotation
+ /annotation) star
+!
+
+variableModifiers
+
+ ^((self tokenFor: 'final')
+ / annotation) star
+! !
+
+!PPJavaSyntax methodsFor:'grammar-statements'!
+
+assertStatement
+
+ ^ (self tokenFor: 'assert') , expression ,
+ ((self tokenFor: ':'), expression ) optional ,
+ (self tokenFor: ';')
+!
+
+basicForStatement
+
+ ^ (self tokenFor: 'for') ,
+ (self tokenFor: '('),
+ forInit optional, (self tokenFor: ';'),
+ expression , (self tokenFor: ';'),
+ expressionList optional,
+ (self tokenFor: ')'),
+ statement
+
+!
+
+blockStatement
+
+ ^ localVariableDeclarationStatement
+ / classOrInterfaceDeclaration
+ / statement
+!
+
+blockStatements
+
+ ^ (blockStatement star).
+!
+
+breakStatement
+
+ ^ (self tokenFor: 'break') , identifier optional , (self tokenFor: ';')
+!
+
+catchClause
+
+ ^ (self tokenFor: 'catch') ,
+ (self tokenFor: '(') ,
+ formalParameter ,
+ (self tokenFor: ')'),
+ block
+
+!
+
+catches
+
+ ^ catchClause plus
+!
+
+continueStatement
+
+ ^ (self tokenFor: 'continue') , identifier optional , (self tokenFor: ';')
+!
+
+doStatement
+
+ ^(self tokenFor: 'do') , statement ,
+ (self tokenFor: 'while') , parExpression ,
+ (self tokenFor: ';')
+!
+
+emptyStatement
+
+ ^ (self tokenFor: ';')
+!
+
+enhancedForStatement
+
+ ^ (self tokenFor: 'for') ,
+ (self tokenFor: '(') ,
+ variableModifiers ,
+ type ,
+ identifier ,
+ (self tokenFor: ':'),
+ expression,
+ (self tokenFor: ')'),
+ statement
+!
+
+expressionList
+
+ ^ expression , ((self tokenFor: ','), expression ) star
+!
+
+expressionStatement
+
+ ^ expression , (self tokenFor: ';')
+!
+
+forInit
+
+ ^ localVariableDeclaration
+ / expressionList
+!
+
+forStatement
+
+ ^ enhancedForStatement
+ / basicForStatement
+!
+
+ifStatement
+
+ ^(self tokenFor: 'if') , parExpression , statement ,
+ ((self tokenFor: 'else'), statement ) optional
+!
+
+labeledStatement
+
+ ^ identifier , (self tokenFor: ':') , statement
+!
+
+localVariableDeclaration
+
+ ^ variableModifiers , type , variableDeclarators
+!
+
+localVariableDeclarationStatement
+
+ ^ localVariableDeclaration , (self tokenFor: ';')
+!
+
+returnStatement
+
+ ^ (self tokenFor: 'return') , expression optional , (self tokenFor: ';')
+!
+
+statement
+
+ ^ statementWithoutTrailingSubstatement
+ / ifStatement
+ / forStatement
+ / whileStatement
+ / tryStatement
+ / synchronizedStatement
+ / returnStatement
+ / throwStatement
+ / continueStatement
+ / labeledStatement
+
+!
+
+switchBlockStatementGroup
+
+ ^ switchLabel , blockStatement star
+!
+
+switchLabel
+
+ ^ ((self tokenFor: 'case') , expression , (self tokenFor: ':'))
+ / ((self tokenFor: 'default'), (self tokenFor: ':'))
+!
+
+switchStatement
+
+ ^(self tokenFor: 'switch') , parExpression ,
+ (self tokenFor: '{'),
+ switchBlockStatementGroup star ,
+ (self tokenFor: '}')
+!
+
+synchronizedStatement
+
+ ^ (self tokenFor: 'synchronized') , parExpression , block
+!
+
+throwStatement
+
+ ^ (self tokenFor: 'throw') , expression , (self tokenFor: ';')
+!
+
+tryStatement
+
+ ^ (self tokenFor: 'try') , block ,
+ ( (catches , (self tokenFor: 'finally') , block)
+ / catches
+ / finally
+ ).
+!
+
+whileStatement
+
+ ^(self tokenFor: 'while') , parExpression , statement
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaSyntaxTest.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,553 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPJavaLexiconTest subclass:#PPJavaSyntaxTest
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Tests'
+!
+
+PPJavaSyntaxTest comment:''
+!
+
+!PPJavaSyntaxTest methodsFor:'accessing'!
+
+parserClass
+ ^ PPJavaSyntax
+! !
+
+!PPJavaSyntaxTest methodsFor:'testing'!
+
+testAdditiveExpression1
+
+ self parse: 'true'
+ rule: #additiveExpression
+!
+
+testAdditiveExpression2
+
+ self parse: '3 + 5'
+ rule: #additiveExpression
+!
+
+testAdditiveExpression3
+
+ self parse: '4 + 8 - 2 + 9'
+ rule: #additiveExpression
+!
+
+testAndExpression1
+
+ self parse: 'true'
+ rule: #andExpression
+!
+
+testBlock1
+
+ self parse: '{ }'
+ rule: #block
+!
+
+testBlock2
+
+ self
+ parse:
+ '{
+ System.out.println("Hello World!!");
+ System.out.println("Hello World!!");
+ }'
+ rule: #block
+!
+
+testCompilationUnit1
+
+ self parse: 'package foo;
+ public class CU1 {}'
+ rule: #compilationUnit
+!
+
+testCompilationUnit2
+
+ self parse: 'package foo;
+ import foo.Bar;
+ public class CU2 {
+ }'
+ rule: #compilationUnit
+!
+
+testCompilationUnit3
+
+ self parse: 'class myfirstjavaprog
+{
+ public static void main(String args[])
+ {
+ System.out.println("Hello World!!");
+ }
+}'
+ rule: #compilationUnit
+!
+
+testCompilationUnit4
+
+ self parse: '
+ public class OddEven {
+ private int input;
+ public static void main(String[] args) {
+ OddEven number = new OddEven();
+ number.showDialog(); }
+ public void showDialog() {
+
+ try {
+
+ input = Integer.parseInt(JOptionPane.showInputDialog("Please Enter A Number"));
+ calculate();
+ } catch (NumberFormatException e) {
+
+ System.err.println("ERROR: Invalid input. Please type in a numerical value.");
+ }
+ }
+
+private void calculate() {
+ if (input % 2 == 0) {
+ System.out.println("Even");
+ } else {
+ System.out.println("Odd");
+ }
+ }
+ }'
+ rule: #compilationUnit
+!
+
+testCompilationUnit5
+
+ self parse: 'class myfirstjavaprog
+{
+
+ public myfirstjavaprog() {
+
+ }
+
+ public static void main(String args[])
+ {
+ System.out.println("Hello World!!");
+ }
+}'
+ rule: #compilationUnit
+!
+
+testConditionalAndExpression1
+
+ self parse: 'true'
+ rule: #conditionalAndExpression
+!
+
+testConditionalOrExpression1
+
+ self parse: 'true'
+ rule: #conditionalOrExpression
+!
+
+testEqualityExpression1
+
+ self
+ parse: 'true'
+ rule: #equalityExpression
+!
+
+testExclusiveOrExpression1
+
+ self parse: 'true'
+ rule: #exclusiveOrExpression
+!
+
+testExpression1
+
+ self parse: '1 + 2'
+ rule: #expression
+!
+
+testExpression2
+
+ self parse: 'true'
+ rule: #expression
+!
+
+testExpression3
+
+ self parse: 'a.method()'
+ rule: #expression
+!
+
+testExpression4
+
+ self parse: 'a'
+ rule: #expression
+!
+
+testExpression5
+
+ self parse: 'a += 5'
+ rule: #expression
+!
+
+testFormalParameters1
+
+ self
+ parse: '
+ (String s, Object parameterType)
+'
+ rule: #formalParameters
+!
+
+testFormalParameters2
+
+ self
+ parse: '
+ (Object ... parameterType)
+'
+ rule: #formalParameters
+!
+
+testFormalParameters3
+
+ self
+ parse: '(String name, Class<?>... parameterTypes)
+'
+ rule: #formalParameters
+!
+
+testFormalParameters4
+
+ self
+ parse: '(int one, int two, int three, int four)'
+ rule: #formalParameters
+!
+
+testFormalParameters5
+
+ self
+ parse: '()'
+ rule: #formalParameters
+!
+
+testIfStatement1
+
+ self parse: 'if (true) {}'
+ rule: #ifStatement
+!
+
+testIfStatement2
+
+ self parse: 'if (true) {} else {}'
+ rule: #ifStatement
+!
+
+testIfStatement3
+
+ self parse: '
+ if (true)
+ {int a = 0; a = 1;}
+ else
+ {return false;}'
+ rule: #ifStatement
+!
+
+testIfStatement4
+
+ self parse: 'if (true) a = 0;'
+ rule: #ifStatement
+!
+
+testIfStatement5
+
+ self parse: 'if (a < 4) {}'
+ rule: #ifStatement
+!
+
+testImportDeclaration1
+
+ self parse: 'import foo.Top;'
+ rule: #importDeclaration
+!
+
+testImportDeclaration2
+
+ self parse: 'import foo.Top2.*;'
+ rule: #importDeclaration
+!
+
+testInclusiveOrExpression1
+
+ self parse: 'true'
+ rule: #inclusiveOrExpression
+!
+
+testInstanceofExpression1
+
+ self
+ parse: 'true'
+ rule: #instanceofExpression
+!
+
+testLocalVariableDeclaration1
+
+ self parse: 'Type name'
+ rule: #localVariableDeclaration
+!
+
+testLocalVariableDeclaration2
+
+ self parse: 'Type name = value, name2'
+ rule: #localVariableDeclaration
+!
+
+testLocalVariableDeclarationStatement1
+
+ self parse: 'int i = 5;'
+ rule: #localVariableDeclarationStatement
+!
+
+testLocalVariableDeclarationStatement2
+
+ self parse: 'int i, j = 6;'
+ rule: #localVariableDeclarationStatement
+!
+
+testLocalVariableDeclarationStatement3
+
+ self parse: 'Srting str, in, g;'
+ rule: #localVariableDeclarationStatement
+!
+
+testMethodDeclaration3
+
+ self
+ parse: '
+ public void getMethod(String s, Object ... parameterType)
+ {
+ }
+'
+ rule: #methodDeclaration
+!
+
+testMethodDeclaration4
+
+ self
+ parse: '
+ public void getMethod(String s, int o)
+ {
+ }
+'
+ rule: #methodDeclaration
+!
+
+testMultiplicativeExpression1
+
+ self parse: 'true'
+ rule: #multiplicativeExpression
+!
+
+testMultiplicativeExpression2
+
+ self parse: '3 * 5'
+ rule: #multiplicativeExpression
+!
+
+testMultiplicativeExpression3
+
+ self parse: '4 * 8 / 2 * 9'
+ rule: #multiplicativeExpression
+!
+
+testNormalParameterDecl1
+
+ self parse: 'final int integers[]'
+ rule: #normalParameterDecl
+!
+
+testNormalParameterDecl2
+
+ self parse: 'String str'
+ rule: #normalParameterDecl
+!
+
+testPackageDeclaration1
+
+ self parse: 'package foo;'
+ rule: #packageDeclaration
+!
+
+testPackageDeclaration2
+
+ self parse: 'package foo.Bar;'
+ rule: #packageDeclaration
+!
+
+testPackageDeclaration3
+
+ self fail: 'package ;'
+ rule: #packageDeclaration
+!
+
+testPrimary1
+
+ self
+ parse: 'true'
+ rule: #primary
+!
+
+testPrimary2
+
+ self
+ parse: '"Java string"'
+ rule: #primary
+!
+
+testPrimaryWithselectors1
+
+ self
+ parse: 'true'
+ rule: #primaryWithselectors
+!
+
+testPrimaryWithselectors2
+
+ self
+ parse: 'foo().bar()'
+ rule: #primaryWithselectors
+!
+
+testQualifiedName1
+
+ self parse: 'a.a'
+ rule: #qualifiedName
+!
+
+testRelationalExpression1
+
+ self parse: 'true'
+ rule: #relationalExpression
+!
+
+testRelationalExpression2
+
+ self parse: '3 > 5'
+ rule: #relationalExpression
+!
+
+testReturnStatement1
+
+ self parse: 'return true;'
+ rule: #returnStatement
+!
+
+testReturnStatement2
+
+ self parse: 'return;'
+ rule: #returnStatement
+!
+
+testShiftExpression1
+
+ self parse: 'true'
+ rule: #shiftExpression
+!
+
+testStatement1
+
+ self parse: 'System.out.println("Hello World!!");'
+ rule: #statement
+!
+
+testStatement2
+
+ self parse: 'return true;'
+ rule: #statement
+!
+
+testStatement3
+
+ self parse: '{}'
+ rule: #statement
+!
+
+testUnaryExpression1
+
+ self parse: 'a'
+ rule: #unaryExpression
+!
+
+testUnaryExpression2
+
+ self parse: 'true'
+ rule: #unaryExpression
+!
+
+testUnaryExpressionNotPlusMinus1
+
+ self
+ parse: 'true'
+ rule: #unaryExpressionNotPlusMinus
+!
+
+testVariableDeclarator1
+
+ self parse: 'var'
+ rule: #variableDeclarator
+!
+
+testVariableDeclarator2
+
+ self parse: 'var[][]'
+ rule: #variableDeclarator
+!
+
+testVariableDeclarator3
+
+ self parse: 'var = a.methd()'
+ rule: #variableDeclarator
+!
+
+testWhileStatement1
+
+ self parse: 'while (true) object.executeMethod();'
+ rule: #whileStatement
+!
+
+testWhileStatement2
+
+ self parse: 'while (3>2) {block; of; statements;}'
+ rule: #whileStatement
+! !
+
+!PPJavaSyntaxTest methodsFor:'testing-classes'!
+
+testClassDeclaration1
+
+ self parse: '//comment
+ class myfirstjavaprog
+{
+ public static void main(String args[])
+ {
+ System.out.println("Hello World!!");
+ }
+}'
+ rule: #classDeclaration
+!
+
+testMethodDeclaration1
+
+ self
+ parse: 'public void aMethod() { }'
+ rule: #methodDeclaration
+!
+
+testMethodDeclaration2
+
+ self
+ parse: 'public aMethod() { }'
+ rule: #methodDeclaration
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaToken.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,31 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPToken subclass:#PPJavaToken
+ instanceVariableNames:'comments'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Core'
+!
+
+PPJavaToken comment:''
+!
+
+!PPJavaToken methodsFor:'accessing'!
+
+comments
+ ^ comments
+!
+
+comments: anObject
+ comments := anObject
+! !
+
+!PPJavaToken methodsFor:'compatibility'!
+
+length
+
+ ^ self size
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaTokenParser.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,64 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPTokenParser subclass:#PPJavaTokenParser
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Core'
+!
+
+PPJavaTokenParser comment:''
+!
+
+!PPJavaTokenParser methodsFor:'parsing'!
+
+parseComments: anArray on: aStream
+
+ | start comments |
+ comments := anArray.
+ [
+ | peekTwice |
+ [ aStream atEnd not and: [ aStream peek isSeparator ] ]
+ whileTrue: [ aStream next ].
+ peekTwice := aStream peekTwice.
+ ((peekTwice first = $/) and:
+ [ (peekTwice second = $*) or: [peekTwice second = $/]])] whileTrue: [
+"
+ Transcript show: ('position ', aStream position asString, ' char ', aStream next asString); cr.
+"
+ aStream next.
+ start := aStream position.
+ (aStream next = $*)
+ ifTrue: [ aStream upToAll: '*/' ]
+ ifFalse: [
+ | position |
+ position := aStream position.
+ aStream upToAnyOf: CharacterSet crlf].
+ comments := comments copyWith: (start to: aStream position) ].
+ ^ comments
+!
+
+parseOn: aPPContext
+ | token comments memento |
+ memento := aPPContext remember.
+ comments := self
+ parseComments: #()
+ on: aPPContext.
+ token := super parseOn: aPPContext.
+ token isPetitFailure ifTrue: [
+ aPPContext restore: memento.
+ ^ token ].
+ comments := self
+ parseComments: comments
+ on: aPPContext.
+ ^ token comments: comments
+! !
+
+!PPJavaTokenParser methodsFor:'private'!
+
+defaultTokenClass
+ ^ PPJavaToken
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/PPJavaWhitespaceParser.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,63 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPParser subclass:#PPJavaWhitespaceParser
+ instanceVariableNames:'separator'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitJava-Core'
+!
+
+PPJavaWhitespaceParser comment:''
+!
+
+!PPJavaWhitespaceParser methodsFor:'as yet unclassified'!
+
+acceptsEpsilon
+ ^ true
+!
+
+acceptsEpsilonOpenSet: set
+ ^ true
+!
+
+firstCharParser
+ ^ PPFailingParser new
+!
+
+firstCharSet
+ ^ PPCharSetPredicate on: [:e | false ]
+!
+
+isNullable
+ ^ true
+!
+
+name
+ ^ 'java_ws'
+!
+
+parseOn: context
+
+ | start |
+
+ [
+ | peekTwice |
+ [ context atEnd not and: [ context peek isSeparator ] ]
+ whileTrue: [ context next ].
+ peekTwice := context peekTwice.
+ ((peekTwice first = $/) and:
+ [ (peekTwice second = $*) or: [peekTwice second = $/]])
+ ] whileTrue: [
+ context next.
+ start := context position.
+ (context next = $*)
+ ifTrue: [ context upToAll: '*/' ]
+ ifFalse: [
+ | position |
+ position := context position.
+ context upToAnyOf: CharacterSet crlf].
+ ].
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/abbrev.stc Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,55 @@
+# automagically generated by the project definition
+# this file is needed for stc to be able to compile modules independently.
+# it provides information about a classes filename, category and especially namespace.
+PJASTNode PJASTNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJASTNodeVisitor PJASTNodeVisitor stx:goodies/petitparser/parsers/java 'PetitJava-AST-Visitors' 0
+PPJavaLexicon PPJavaLexicon stx:goodies/petitparser/parsers/java 'PetitJava-Core' 0
+PPJavaLexiconTest PPJavaLexiconTest stx:goodies/petitparser/parsers/java 'PetitJava-Tests' 1
+PPJavaToken PPJavaToken stx:goodies/petitparser/parsers/java 'PetitJava-Core' 0
+PPJavaTokenParser PPJavaTokenParser stx:goodies/petitparser/parsers/java 'PetitJava-Core' 0
+PPJavaWhitespaceParser PPJavaWhitespaceParser stx:goodies/petitparser/parsers/java 'PetitJava-Core' 0
+stx_goodies_petitparser_parsers_java stx_goodies_petitparser_parsers_java stx:goodies/petitparser/parsers/java '* Projects & Packages *' 3
+PJBlockNode PJBlockNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJBodyDeclarationNode PJBodyDeclarationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJCompilationUnitNode PJCompilationUnitNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJExpressionNode PJExpressionNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJImportDeclarationNode PJImportDeclarationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJModifierNode PJModifierNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJPackageDeclarationNode PJPackageDeclarationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJParameterDeclaratorNode PJParameterDeclaratorNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJStatementNode PJStatementNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJSyntaxNode PJSyntaxNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJTypeNode PJTypeNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJVariableDeclaratorNode PJVariableDeclaratorNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PPJavaSyntax PPJavaSyntax stx:goodies/petitparser/parsers/java 'PetitJava-Core' 0
+PPJavaSyntaxTest PPJavaSyntaxTest stx:goodies/petitparser/parsers/java 'PetitJava-Tests' 1
+PJAbstractTypeDeclarationNode PJAbstractTypeDeclarationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJAnnotationNode PJAnnotationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJArrayTypeNode PJArrayTypeNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJBehaviouralNode PJBehaviouralNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJBooleanLiteralNode PJBooleanLiteralNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJCharacterLiteralNode PJCharacterLiteralNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJCommentsNode PJCommentsNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJExpressionStatementNode PJExpressionStatementNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJFloatLiteralNode PJFloatLiteralNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJIdentifierNode PJIdentifierNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJIfStatementNode PJIfStatementNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJInfixOperationNode PJInfixOperationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJIntegerLiteralNode PJIntegerLiteralNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJLocalVariableDeclarationStatementNode PJLocalVariableDeclarationStatementNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJNameNode PJNameNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJNullLiteralNode PJNullLiteralNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJPrimitiveTypeNode PJPrimitiveTypeNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJReturnStatementNode PJReturnStatementNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJSeparatorNode PJSeparatorNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJStringLiteralNode PJStringLiteralNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJWhileStatementNode PJWhileStatementNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PPJavaParser PPJavaParser stx:goodies/petitparser/parsers/java 'PetitJava-Core' 0
+PPJavaParserTest PPJavaParserTest stx:goodies/petitparser/parsers/java 'PetitJava-Tests' 1
+PJConstructorDeclarationNode PJConstructorDeclarationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJEndOfLineCommentsNode PJEndOfLineCommentsNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJMethodDeclarationNode PJMethodDeclarationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 1
+PJQualifiedNameNode PJQualifiedNameNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJSimpleNameNode PJSimpleNameNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJTraditionalCommentsNode PJTraditionalCommentsNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
+PJTypeDeclarationNode PJTypeDeclarationNode stx:goodies/petitparser/parsers/java 'PetitJava-AST' 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/bc.mak Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,138 @@
+# $Header$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: stx_goodies_petitparser_parsers_java.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# Notice, that the name bc.mak is historical (from times, when only borland c was supported).
+# This file contains make rules for the win32 platform using either borland-bcc or visual-c.
+# It shares common definitions with the unix-make in Make.spec.
+# The bc.mak supports the following targets:
+# bmake - compile all st-files to a classLib (dll)
+# bmake clean - clean all temp files
+# bmake clobber - clean all
+#
+# Historic Note:
+# this used to contain only rules to make with borland
+# (called via bmake, by "make.exe -f bc.mak")
+# this has changed; it is now also possible to build using microsoft visual c
+# (called via vcmake, by "make.exe -f bc.mak -DUSEVC")
+#
+TOP=..\..\..\..
+INCLUDE_TOP=$(TOP)\..
+
+
+
+!INCLUDE $(TOP)\rules\stdHeader_bc
+
+!INCLUDE Make.spec
+
+LIBNAME=libstx_goodies_petitparser_parsers_java
+MODULE_PATH=goodies\petitparser\parsers\java
+RESFILES=java.$(RES)
+
+
+
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\petitparser -I$(INCLUDE_TOP)\stx\goodies\petitparser\tests -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2
+LOCALDEFINES=
+
+STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -varPrefix=$(LIBNAME)
+LOCALLIBS=
+
+OBJS= $(COMMON_OBJS) $(WIN32_OBJS)
+
+ALL:: classLibRule
+
+classLibRule: $(OUTDIR) $(OUTDIR)$(LIBNAME).dll
+
+!INCLUDE $(TOP)\rules\stdRules_bc
+
+# build all mandatory prerequisite packages (containing superclasses) for this package
+prereq:
+ pushd ..\..\..\..\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\..\..\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\..\..\libbasic3 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\..\..\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\.. & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\..\..\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\..\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+ pushd ..\..\tests & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+
+
+
+
+
+
+
+test: $(TOP)\goodies\builder\reports\NUL
+ pushd $(TOP)\goodies\builder\reports & $(MAKE_BAT)
+ $(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
+
+clean::
+ del *.$(CSUFFIX)
+
+
+# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)PJASTNode.$(O) PJASTNode.$(H): PJASTNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJASTNodeVisitor.$(O) PJASTNodeVisitor.$(H): PJASTNodeVisitor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaLexicon.$(O) PPJavaLexicon.$(H): PPJavaLexicon.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPCompositeParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaToken.$(O) PPJavaToken.$(H): PPJavaToken.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPToken.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaTokenParser.$(O) PPJavaTokenParser.$(H): PPJavaTokenParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPFlattenParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPTokenParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaWhitespaceParser.$(O) PPJavaWhitespaceParser.$(H): PPJavaWhitespaceParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)stx_goodies_petitparser_parsers_java.$(O) stx_goodies_petitparser_parsers_java.$(H): stx_goodies_petitparser_parsers_java.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)PJBlockNode.$(O) PJBlockNode.$(H): PJBlockNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJBodyDeclarationNode.$(O) PJBodyDeclarationNode.$(H): PJBodyDeclarationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJCompilationUnitNode.$(O) PJCompilationUnitNode.$(H): PJCompilationUnitNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJExpressionNode.$(O) PJExpressionNode.$(H): PJExpressionNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJImportDeclarationNode.$(O) PJImportDeclarationNode.$(H): PJImportDeclarationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJModifierNode.$(O) PJModifierNode.$(H): PJModifierNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJPackageDeclarationNode.$(O) PJPackageDeclarationNode.$(H): PJPackageDeclarationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJParameterDeclaratorNode.$(O) PJParameterDeclaratorNode.$(H): PJParameterDeclaratorNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJStatementNode.$(O) PJStatementNode.$(H): PJStatementNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJSyntaxNode.$(O) PJSyntaxNode.$(H): PJSyntaxNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJTypeNode.$(O) PJTypeNode.$(H): PJTypeNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJVariableDeclaratorNode.$(O) PJVariableDeclaratorNode.$(H): PJVariableDeclaratorNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaSyntax.$(O) PPJavaSyntax.$(H): PPJavaSyntax.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPCompositeParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PPJavaLexicon.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJAbstractTypeDeclarationNode.$(O) PJAbstractTypeDeclarationNode.$(H): PJAbstractTypeDeclarationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJAnnotationNode.$(O) PJAnnotationNode.$(H): PJAnnotationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJArrayTypeNode.$(O) PJArrayTypeNode.$(H): PJArrayTypeNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJTypeNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJBehaviouralNode.$(O) PJBehaviouralNode.$(H): PJBehaviouralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJBooleanLiteralNode.$(O) PJBooleanLiteralNode.$(H): PJBooleanLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJCharacterLiteralNode.$(O) PJCharacterLiteralNode.$(H): PJCharacterLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJCommentsNode.$(O) PJCommentsNode.$(H): PJCommentsNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJSyntaxNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJExpressionStatementNode.$(O) PJExpressionStatementNode.$(H): PJExpressionStatementNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJStatementNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJFloatLiteralNode.$(O) PJFloatLiteralNode.$(H): PJFloatLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJIdentifierNode.$(O) PJIdentifierNode.$(H): PJIdentifierNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJIfStatementNode.$(O) PJIfStatementNode.$(H): PJIfStatementNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJStatementNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJInfixOperationNode.$(O) PJInfixOperationNode.$(H): PJInfixOperationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJIntegerLiteralNode.$(O) PJIntegerLiteralNode.$(H): PJIntegerLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJLocalVariableDeclarationStatementNode.$(O) PJLocalVariableDeclarationStatementNode.$(H): PJLocalVariableDeclarationStatementNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJStatementNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJNameNode.$(O) PJNameNode.$(H): PJNameNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJNullLiteralNode.$(O) PJNullLiteralNode.$(H): PJNullLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJPrimitiveTypeNode.$(O) PJPrimitiveTypeNode.$(H): PJPrimitiveTypeNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJTypeNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJReturnStatementNode.$(O) PJReturnStatementNode.$(H): PJReturnStatementNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJStatementNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJSeparatorNode.$(O) PJSeparatorNode.$(H): PJSeparatorNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJStringLiteralNode.$(O) PJStringLiteralNode.$(H): PJStringLiteralNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJWhileStatementNode.$(O) PJWhileStatementNode.$(H): PJWhileStatementNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJStatementNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PPJavaParser.$(O) PPJavaParser.$(H): PPJavaParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPCompositeParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PPJavaLexicon.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PPJavaSyntax.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJConstructorDeclarationNode.$(O) PJConstructorDeclarationNode.$(H): PJConstructorDeclarationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJBehaviouralNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJEndOfLineCommentsNode.$(O) PJEndOfLineCommentsNode.$(H): PJEndOfLineCommentsNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJCommentsNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJSyntaxNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJMethodDeclarationNode.$(O) PJMethodDeclarationNode.$(H): PJMethodDeclarationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJBehaviouralNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJQualifiedNameNode.$(O) PJQualifiedNameNode.$(H): PJQualifiedNameNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJNameNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJSimpleNameNode.$(O) PJSimpleNameNode.$(H): PJSimpleNameNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJExpressionNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJNameNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJTraditionalCommentsNode.$(O) PJTraditionalCommentsNode.$(H): PJTraditionalCommentsNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJCommentsNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJSyntaxNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)PJTypeDeclarationNode.$(O) PJTypeDeclarationNode.$(H): PJTypeDeclarationNode.st $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJASTNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJAbstractTypeDeclarationNode.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\parsers\java\PJBodyDeclarationNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\ArithmeticValue.$(H) $(INCLUDE_TOP)\stx\libbasic\Integer.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Number.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+
+# ENDMAKEDEPEND --- do not remove this line
+
+# **Must be at end**
+
+# Enforce recompilation of package definition class if Mercurial working
+# copy state changes. Together with --guessVersion it ensures that package
+# definition class always contains correct binary revision string.
+!IFDEF HGROOT
+$(OUTDIR)stx_goodies_petitparser_parsers_java.$(O): $(HGROOT)\.hg\dirstate
+!ENDIF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/bmake.bat Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,12 @@
+@REM -------
+@REM make using Borland bcc32
+@REM type bmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+@SET DEFINES=
+@REM Kludge got Mercurial, cannot be implemented in Borland make
+@FOR /F "tokens=*" %%i in ('hg root') do SET HGROOT=%%i
+@IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%"
+make.exe -N -f bc.mak %DEFINES% %*
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/extensions.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,25 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"!
+
+!Integer class methodsFor:'*PetitJava-AST'!
+
+readFromJavaString: aString
+ ^ Number readFromString: (
+ (aString asLowercase beginsWith: '0x')
+ ifTrue: [ '16r', (aString allButFirst: 2) ]
+ ifFalse: [ aString size > 1 & aString first = $0
+ ifTrue: [ '8r', aString ]
+ ifFalse: [ aString ]])
+! !
+
+!PPParser methodsFor:'*petitjava-operations'!
+
+javaToken
+ ^ PPJavaTokenParser on: self
+! !
+
+!stx_goodies_petitparser_parsers_java class methodsFor:'documentation'!
+
+extensionsVersion_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/java.rc Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,37 @@
+//
+// DO NOT EDIT
+// automagically generated from the projectDefinition: stx_goodies_petitparser_parsers_java.
+//
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 6,2,32767,32767
+ PRODUCTVERSION 6,2,5,0
+#if (__BORLANDC__)
+ FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
+ FILEFLAGS VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
+ FILEOS VOS_NT_WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VS_USER_DEFINED
+#endif
+
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ BEGIN
+ VALUE "CompanyName", "eXept Software AG\0"
+ VALUE "FileDescription", "Smalltalk/X Class library (LIB)\0"
+ VALUE "FileVersion", "6.2.32767.32767\0"
+ VALUE "InternalName", "stx:goodies/petitparser/parsers/java\0"
+ VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2015\nCopyright eXept Software AG 1998-2015\0"
+ VALUE "ProductName", "Smalltalk/X\0"
+ VALUE "ProductVersion", "6.2.5.0\0"
+ VALUE "ProductDate", "Tue, 21 Apr 2015 12:15:35 GMT\0"
+ END
+
+ END
+
+ BLOCK "VarFileInfo"
+ BEGIN // Language | Translation
+ VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
+ END
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/lccmake.bat Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,8 @@
+@REM -------
+@REM make using lcc compiler
+@REM type lccmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+make.exe -N -f bc.mak -DUSELCC=1 %*
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/libInit.cc Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,82 @@
+/*
+ * $Header$
+ *
+ * DO NOT EDIT
+ * automagically generated from the projectDefinition: stx_goodies_petitparser_parsers_java.
+ */
+#define __INDIRECTVMINITCALLS__
+#include <stc.h>
+
+#ifdef WIN32
+# pragma codeseg INITCODE "INITCODE"
+#endif
+
+#if defined(INIT_TEXT_SECTION) || defined(DLL_EXPORT)
+DLL_EXPORT void _libstx_goodies_petitparser_parsers_java_Init() INIT_TEXT_SECTION;
+DLL_EXPORT void _libstx_goodies_petitparser_parsers_java_InitDefinition() INIT_TEXT_SECTION;
+#endif
+
+void _libstx_goodies_petitparser_parsers_java_InitDefinition(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("libstx_goodies_petitparser_parsers_java__DFN", _libstx_goodies_petitparser_parsers_java_InitDefinition, "stx:goodies/petitparser/parsers/java");
+_stx_137goodies_137petitparser_137parsers_137java_Init(pass,__pRT__,snd);
+
+__END_PACKAGE__();
+}
+
+void _libstx_goodies_petitparser_parsers_java_Init(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("libstx_goodies_petitparser_parsers_java", _libstx_goodies_petitparser_parsers_java_Init, "stx:goodies/petitparser/parsers/java");
+_PJASTNode_Init(pass,__pRT__,snd);
+_PJASTNodeVisitor_Init(pass,__pRT__,snd);
+_PPJavaLexicon_Init(pass,__pRT__,snd);
+_PPJavaToken_Init(pass,__pRT__,snd);
+_PPJavaTokenParser_Init(pass,__pRT__,snd);
+_PPJavaWhitespaceParser_Init(pass,__pRT__,snd);
+_stx_137goodies_137petitparser_137parsers_137java_Init(pass,__pRT__,snd);
+_PJBlockNode_Init(pass,__pRT__,snd);
+_PJBodyDeclarationNode_Init(pass,__pRT__,snd);
+_PJCompilationUnitNode_Init(pass,__pRT__,snd);
+_PJExpressionNode_Init(pass,__pRT__,snd);
+_PJImportDeclarationNode_Init(pass,__pRT__,snd);
+_PJModifierNode_Init(pass,__pRT__,snd);
+_PJPackageDeclarationNode_Init(pass,__pRT__,snd);
+_PJParameterDeclaratorNode_Init(pass,__pRT__,snd);
+_PJStatementNode_Init(pass,__pRT__,snd);
+_PJSyntaxNode_Init(pass,__pRT__,snd);
+_PJTypeNode_Init(pass,__pRT__,snd);
+_PJVariableDeclaratorNode_Init(pass,__pRT__,snd);
+_PPJavaSyntax_Init(pass,__pRT__,snd);
+_PJAbstractTypeDeclarationNode_Init(pass,__pRT__,snd);
+_PJAnnotationNode_Init(pass,__pRT__,snd);
+_PJArrayTypeNode_Init(pass,__pRT__,snd);
+_PJBehaviouralNode_Init(pass,__pRT__,snd);
+_PJBooleanLiteralNode_Init(pass,__pRT__,snd);
+_PJCharacterLiteralNode_Init(pass,__pRT__,snd);
+_PJCommentsNode_Init(pass,__pRT__,snd);
+_PJExpressionStatementNode_Init(pass,__pRT__,snd);
+_PJFloatLiteralNode_Init(pass,__pRT__,snd);
+_PJIdentifierNode_Init(pass,__pRT__,snd);
+_PJIfStatementNode_Init(pass,__pRT__,snd);
+_PJInfixOperationNode_Init(pass,__pRT__,snd);
+_PJIntegerLiteralNode_Init(pass,__pRT__,snd);
+_PJLocalVariableDeclarationStatementNode_Init(pass,__pRT__,snd);
+_PJNameNode_Init(pass,__pRT__,snd);
+_PJNullLiteralNode_Init(pass,__pRT__,snd);
+_PJPrimitiveTypeNode_Init(pass,__pRT__,snd);
+_PJReturnStatementNode_Init(pass,__pRT__,snd);
+_PJSeparatorNode_Init(pass,__pRT__,snd);
+_PJStringLiteralNode_Init(pass,__pRT__,snd);
+_PJWhileStatementNode_Init(pass,__pRT__,snd);
+_PPJavaParser_Init(pass,__pRT__,snd);
+_PJConstructorDeclarationNode_Init(pass,__pRT__,snd);
+_PJEndOfLineCommentsNode_Init(pass,__pRT__,snd);
+_PJMethodDeclarationNode_Init(pass,__pRT__,snd);
+_PJQualifiedNameNode_Init(pass,__pRT__,snd);
+_PJSimpleNameNode_Init(pass,__pRT__,snd);
+_PJTraditionalCommentsNode_Init(pass,__pRT__,snd);
+_PJTypeDeclarationNode_Init(pass,__pRT__,snd);
+
+_stx_137goodies_137petitparser_137parsers_137java_extensions_Init(pass,__pRT__,snd);
+__END_PACKAGE__();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/mingwmake.bat Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,16 @@
+@REM -------
+@REM make using mingw gnu compiler
+@REM type mingwmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+@SET DEFINES=
+@REM Kludge got Mercurial, cannot be implemented in Borland make
+@FOR /F "tokens=*" %%i in ('hg root') do SET HGROOT=%%i
+@IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%"
+
+@pushd ..\..\..\..\rules
+@call find_mingw.bat
+@popd
+make.exe -N -f bc.mak %DEFINES% %USEMINGW_ARG% %*
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/stx_goodies_petitparser_parsers_java.st Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,208 @@
+"{ Package: 'stx:goodies/petitparser/parsers/java' }"
+
+"{ NameSpace: Smalltalk }"
+
+LibraryDefinition subclass:#stx_goodies_petitparser_parsers_java
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'* Projects & Packages *'
+!
+
+
+!stx_goodies_petitparser_parsers_java class methodsFor:'accessing - monticello'!
+
+monticelloLastMergedVersionInfo
+ "The last merged version is: "
+
+ ^ '
+ Name: PetitJava-JanKurs.160
+ Author: JanKurs
+ Time: 19-12-2014, 01:00:18.354 PM
+ UUID: 1cb1b46d-8c68-4751-9720-f0dd742f3e16
+ '
+
+ "Created: / 03-10-2014 / 02:27:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-04-2015 / 13:03:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+monticelloName
+ "Return name of the package for Monticello. This is used when package is exported"
+
+ ^ 'PetitJava'
+
+ "Created: / 03-10-2014 / 01:47:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-04-2015 / 13:02:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!stx_goodies_petitparser_parsers_java class methodsFor:'description'!
+
+excludedFromPreRequisites
+ "list packages which are to be explicitely excluded from the automatic constructed
+ prerequisites list. If empty, everything that is found along the inheritance of any of
+ my classes is considered to be a prerequisite package."
+
+ ^ #(
+ )
+!
+
+mandatoryPreRequisites
+ "list packages which are mandatory as a prerequisite.
+ This are packages containing superclasses of my classes and classes which
+ are extended by myself.
+ They are mandatory, because we need these packages as a prerequisite for loading and compiling.
+ This method is generated automatically,
+ by searching along the inheritance chain of all of my classes."
+
+ ^ #(
+ #'stx:goodies/petitparser' "PPCompositeParser - superclass of PPJavaLexicon"
+ #'stx:goodies/petitparser/tests' "PPAbstractParserTest - superclass of PPJavaLexiconTest"
+ #'stx:goodies/sunit' "TestAsserter - superclass of PPJavaLexiconTest"
+ #'stx:libbasic' "ArithmeticValue - extended"
+ )
+!
+
+referencedPreRequisites
+ "list packages which are a prerequisite, because they contain
+ classes which are referenced by my classes.
+ We do not need these packages as a prerequisite for compiling or loading,
+ however, a class from it may be referenced during execution and having it
+ unloaded then may lead to a runtime doesNotUnderstand error, unless the caller
+ includes explicit checks for the package being present.
+ This method is generated automatically,
+ by searching all classes (and their packages) which are referenced by my classes."
+
+ ^ #(
+ #'stx:libbasic2' "CharacterSet - referenced by PPJavaTokenParser>>parseComments:on:"
+ )
+!
+
+stcOptimizationOptions
+ "do not inline the not operation here - it is overwritten"
+
+ ^ super stcOptimizationOptions , ' -inlinenot'
+
+ "Created: / 13-04-2015 / 14:18:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+subProjects
+ "list packages which are known as subprojects.
+ The generated makefile will enter those and make there as well.
+ However: they are not forced to be loaded when a package is loaded;
+ for those, redefine requiredPrerequisites."
+
+ ^ #(
+ )
+! !
+
+!stx_goodies_petitparser_parsers_java class methodsFor:'description - contents'!
+
+classNamesAndAttributes
+ "lists the classes which are to be included in the project.
+ Each entry in the list may be: a single class-name (symbol),
+ or an array-literal consisting of class name and attributes.
+ Attributes are: #autoload or #<os> where os is one of win32, unix,..."
+
+ ^ #(
+ "<className> or (<className> attributes...) in load order"
+ PJASTNode
+ PJASTNodeVisitor
+ PPJavaLexicon
+ (PPJavaLexiconTest autoload)
+ PPJavaToken
+ PPJavaTokenParser
+ PPJavaWhitespaceParser
+ #'stx_goodies_petitparser_parsers_java'
+ PJBlockNode
+ PJBodyDeclarationNode
+ PJCompilationUnitNode
+ PJExpressionNode
+ PJImportDeclarationNode
+ PJModifierNode
+ PJPackageDeclarationNode
+ PJParameterDeclaratorNode
+ PJStatementNode
+ PJSyntaxNode
+ PJTypeNode
+ PJVariableDeclaratorNode
+ PPJavaSyntax
+ (PPJavaSyntaxTest autoload)
+ PJAbstractTypeDeclarationNode
+ PJAnnotationNode
+ PJArrayTypeNode
+ PJBehaviouralNode
+ PJBooleanLiteralNode
+ PJCharacterLiteralNode
+ PJCommentsNode
+ PJExpressionStatementNode
+ PJFloatLiteralNode
+ PJIdentifierNode
+ PJIfStatementNode
+ PJInfixOperationNode
+ PJIntegerLiteralNode
+ PJLocalVariableDeclarationStatementNode
+ PJNameNode
+ PJNullLiteralNode
+ PJPrimitiveTypeNode
+ PJReturnStatementNode
+ PJSeparatorNode
+ PJStringLiteralNode
+ PJWhileStatementNode
+ PPJavaParser
+ (PPJavaParserTest autoload)
+ PJConstructorDeclarationNode
+ PJEndOfLineCommentsNode
+ PJMethodDeclarationNode
+ PJQualifiedNameNode
+ PJSimpleNameNode
+ PJTraditionalCommentsNode
+ PJTypeDeclarationNode
+ )
+!
+
+extensionMethodNames
+ "list class/selector pairs of extensions.
+ A correponding method with real names must be present in my concrete subclasses"
+
+ ^ #(
+ PPParser javaToken
+ 'Integer class' readFromJavaString:
+ )
+! !
+
+!stx_goodies_petitparser_parsers_java class methodsFor:'description - project information'!
+
+companyName
+ "Returns a company string which will appear in <lib>.rc.
+ Under win32, this is placed into the dlls file-info"
+
+ ^ 'eXept Software AG'
+!
+
+description
+ "Returns a description string which will appear in nt.def / bc.def"
+
+ ^ 'Smalltalk/X Class library'
+!
+
+legalCopyright
+ "Returns a copyright string which will appear in <lib>.rc.
+ Under win32, this is placed into the dlls file-info"
+
+ ^ 'Copyright Claus Gittinger 1988-2015\nCopyright eXept Software AG 1998-2015'
+!
+
+productName
+ "Returns a product name which will appear in <lib>.rc.
+ Under win32, this is placed into the dlls file-info.
+ This method is usually redefined in a concrete application definition"
+
+ ^ 'Smalltalk/X'
+! !
+
+!stx_goodies_petitparser_parsers_java class methodsFor:'documentation'!
+
+version_HG
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/parsers/java/vcmake.bat Tue Apr 21 14:57:16 2015 +0100
@@ -0,0 +1,20 @@
+@REM -------
+@REM make using Microsoft Visual C compiler
+@REM type vcmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+
+@if not defined VSINSTALLDIR (
+ pushd ..\..\..\..\rules
+ call vcsetup.bat
+ popd
+)
+@SET DEFINES=
+@REM Kludge got Mercurial, cannot be implemented in Borland make
+@FOR /F "tokens=*" %%i in ('hg root') do SET HGROOT=%%i
+@IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%"
+make.exe -N -f bc.mak -DUSEVC=1 %DEFINES% %*
+
+
+
+