Initial commit of PetitJava
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 21 Apr 2015 14:57:16 +0100
changeset 435 3bc08fb90133
parent 434 840942b96eea
child 436 e1c44b571db9
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
parsers/java/Make.proto
parsers/java/Make.spec
parsers/java/Makefile.init
parsers/java/PJASTNode.st
parsers/java/PJASTNodeVisitor.st
parsers/java/PJAbstractTypeDeclarationNode.st
parsers/java/PJAnnotationNode.st
parsers/java/PJArrayTypeNode.st
parsers/java/PJBehaviouralNode.st
parsers/java/PJBlockNode.st
parsers/java/PJBodyDeclarationNode.st
parsers/java/PJBooleanLiteralNode.st
parsers/java/PJCharacterLiteralNode.st
parsers/java/PJCommentsNode.st
parsers/java/PJCompilationUnitNode.st
parsers/java/PJConstructorDeclarationNode.st
parsers/java/PJEndOfLineCommentsNode.st
parsers/java/PJExpressionNode.st
parsers/java/PJExpressionStatementNode.st
parsers/java/PJFloatLiteralNode.st
parsers/java/PJIdentifierNode.st
parsers/java/PJIfStatementNode.st
parsers/java/PJImportDeclarationNode.st
parsers/java/PJInfixOperationNode.st
parsers/java/PJIntegerLiteralNode.st
parsers/java/PJLocalVariableDeclarationStatementNode.st
parsers/java/PJMethodDeclarationNode.st
parsers/java/PJModifierNode.st
parsers/java/PJNameNode.st
parsers/java/PJNullLiteralNode.st
parsers/java/PJPackageDeclarationNode.st
parsers/java/PJParameterDeclaratorNode.st
parsers/java/PJPrimitiveTypeNode.st
parsers/java/PJQualifiedNameNode.st
parsers/java/PJReturnStatementNode.st
parsers/java/PJSeparatorNode.st
parsers/java/PJSimpleNameNode.st
parsers/java/PJStatementNode.st
parsers/java/PJStringLiteralNode.st
parsers/java/PJSyntaxNode.st
parsers/java/PJTraditionalCommentsNode.st
parsers/java/PJTypeDeclarationNode.st
parsers/java/PJTypeNode.st
parsers/java/PJVariableDeclaratorNode.st
parsers/java/PJWhileStatementNode.st
parsers/java/PPJavaLexicon.st
parsers/java/PPJavaLexiconTest.st
parsers/java/PPJavaParser.st
parsers/java/PPJavaParserTest.st
parsers/java/PPJavaSyntax.st
parsers/java/PPJavaSyntaxTest.st
parsers/java/PPJavaToken.st
parsers/java/PPJavaTokenParser.st
parsers/java/PPJavaWhitespaceParser.st
parsers/java/abbrev.stc
parsers/java/bc.mak
parsers/java/bmake.bat
parsers/java/extensions.st
parsers/java/java.rc
parsers/java/lccmake.bat
parsers/java/libInit.cc
parsers/java/mingwmake.bat
parsers/java/stx_goodies_petitparser_parsers_java.st
parsers/java/vcmake.bat
--- /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% %*
+
+
+
+