# HG changeset patch # User Jan Vrany # Date 1429624636 -3600 # Node ID 3bc08fb9013393d3ed19d3816845e6e76aea16b9 # Parent 840942b96eeab16c638156f38fa9ec3e5ab6710f 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 diff -r 840942b96eea -r 3bc08fb90133 parsers/java/Make.proto --- /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 + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/Make.spec --- /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) \ + + + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/Makefile.init --- /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 diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJASTNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJASTNodeVisitor.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJAbstractTypeDeclarationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJAnnotationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJArrayTypeNode.st --- /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 , '[]')]) ] +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJBehaviouralNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJBlockNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJBodyDeclarationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJBooleanLiteralNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJCharacterLiteralNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJCommentsNode.st --- /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. + +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJCompilationUnitNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJConstructorDeclarationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJEndOfLineCommentsNode.st --- /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. + +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJExpressionNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJExpressionStatementNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJFloatLiteralNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJIdentifierNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJIfStatementNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJImportDeclarationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJInfixOperationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJIntegerLiteralNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJLocalVariableDeclarationStatementNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJMethodDeclarationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJModifierNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJNameNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJNullLiteralNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJPackageDeclarationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJParameterDeclaratorNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJPrimitiveTypeNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJQualifiedNameNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJReturnStatementNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJSeparatorNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJSimpleNameNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJStatementNode.st --- /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..' +! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJStringLiteralNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJSyntaxNode.st --- /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:'' +! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJTraditionalCommentsNode.st --- /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: $' +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJTypeDeclarationNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJTypeNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJVariableDeclaratorNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PJWhileStatementNode.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaLexicon.st --- /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] ]) +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaLexiconTest.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaParser.st --- /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 ).] +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaParserTest.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaSyntax.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaSyntaxTest.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaToken.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaTokenParser.st --- /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 +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/PPJavaWhitespaceParser.st --- /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]. + ]. +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/abbrev.stc --- /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 diff -r 840942b96eea -r 3bc08fb90133 parsers/java/bc.mak --- /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 diff -r 840942b96eea -r 3bc08fb90133 parsers/java/bmake.bat --- /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% %* + + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/extensions.st --- /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: $' +! ! diff -r 840942b96eea -r 3bc08fb90133 parsers/java/java.rc --- /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 diff -r 840942b96eea -r 3bc08fb90133 parsers/java/lccmake.bat --- /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 %* + + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/libInit.cc --- /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 + +#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__(); +} diff -r 840942b96eea -r 3bc08fb90133 parsers/java/mingwmake.bat --- /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% %* + + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/stx_goodies_petitparser_parsers_java.st --- /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 " + "Modified: / 21-04-2015 / 13:03:18 / Jan Vrany " +! + +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 " + "Modified: / 21-04-2015 / 13:02:58 / Jan Vrany " +! ! + +!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 " +! + +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 # where os is one of win32, unix,..." + + ^ #( + " or ( 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 .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 .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 .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: $' +! ! + diff -r 840942b96eea -r 3bc08fb90133 parsers/java/vcmake.bat --- /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% %* + + + +