tools/JavaParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 22 May 2013 21:15:02 +0100
branchbuiltin-class-support
changeset 2618 e7757e5d593c
parent 2501 53d731454d43
child 2667 5daa560d20d8
permissions -rw-r--r--
Initial attempt to generalized builtin class support.

"{ Package: 'stx:libjava/tools' }"

JavaParserII subclass:#JavaParser
	instanceVariableNames:'builder'
	classVariableNames:''
	poolDictionaries:''
	category:'Languages-Java-Parser'
!

!JavaParser class methodsFor:'documentation'!

documentation
"
    PetitParser based parser for Java. One may pass in a builder, that
    is called whenever a rule is parsed. Builder can build AST or do
    some analysis. 

    Unfinished.

    [author:]
        Jan Vrany <jan.vrany@fit.cvut.cz>

    [instance variables:]

    [class variables:]

    [see also:]

"
! !

!JavaParser class methodsFor:'accessing'!

namesToIgnore

        ^super namesToIgnore ,
        #(builder)

    "Created: / 03-04-2013 / 23:51:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaParser methodsFor:'accessing'!

builder
    ^ builder
!

builder:aJavaParseNodeBuilder
    builder := aJavaParseNodeBuilder.
! !

!JavaParser methodsFor:'grammar'!

compilationUnit 
        "
        ^ 
        (annotations optional, packageDeclaration) optional , 
        importDeclaration star , 
        typeDeclaration star ,
        (self tokenParserFor:#EOF) end
        "

        ^super compilationUnit ==> [:nodes |
            | pkg |

            pkg := (nodes at:1) notNil ifTrue:[(nodes at:1) second] ifFalse:[nil].
            builder newSourceFile_package: pkg imports: (nodes at:2) types: (nodes at:3)            
        ]

    "Created: / 03-04-2013 / 23:18:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 12-04-2013 / 20:24:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

packageDeclaration 
    "
        ^ (self  packageKW) , qualifiedName , (self tokenFor:';')
    "
    ^super packageDeclaration ==> [:nodes |
        builder newPackageDeclaration: (nodes at:2)
    ]

    "Created: / 03-04-2013 / 23:48:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

typeDeclaration

        ^ ((self tokenFor: ';') ==> nil) / classOrInterfaceDeclaration

    "Created: / 03-04-2013 / 23:58:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaParser methodsFor:'grammar-classes'!

normalClassDeclaration 
    "
        ^ classModifiers , (self  classKW) , self typeNameIdentifier ,
                typeParameters optional,
                jsuper optional,
                interfaces optional ,
                classBody
    "
    ^ super normalClassDeclaration ==> [:nodes|
        builder newClassDeclaration_modifiers: (nodes at:1)
                    name: (nodes at:3)
                    typeParameters: (nodes at:4)
                    superclass: (nodes at:5)
                    interfaces: (nodes at:6)
                    members: (nodes at:7)
    ]

    "Created: / 04-04-2013 / 00:04:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaParser methodsFor:'initialization'!

initialize
    super initialize.
    builder := JavaParseNodeBuilder new.

    "Created: / 03-04-2013 / 23:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!JavaParser class methodsFor:'documentation'!

version_CVS
    ^ '$Header: /cvs/stx/stx/libjava/tools/JavaParser.st,v 1.2 2013-02-25 11:15:35 vrany Exp $'
!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '§Id§'
! !