com.jasml.compiler
Class SourceCodeParser

java.lang.Object
  extended bycom.jasml.compiler.SourceCodeParser
All Implemented Interfaces:
Scannable

public class SourceCodeParser
extends java.lang.Object
implements Scannable


Nested Class Summary
private  class SourceCodeParser.LabeledInstructions
           
private static class SourceCodeParser.OpcodeWrapper
           
 
Field Summary
(package private)  ConstantPoolGenerator cpl
           
(package private)  JavaClass javaClass
           
(package private)  boolean precompile
           
private  Scanner scanner
           
 
Fields inherited from interface com.jasml.compiler.Scannable
AccessFlag, Attribute, Bracket_Left, Bracket_Right, Char, Colon, Comma, Defualt, EOF, Equal, Instruction, JavaName, Number_Double, Number_Double_NaN, Number_Double_Negativ_Infinity, Number_Double_Positive_Infinity, Number_Float, Number_Float_NaN, Number_Float_Negativ_Infinity, Number_Float_Positive_Infinity, Number_Integer, Number_Long, Pointer, SBracket_Left, SBracket_Right, String, WhiteSpace
 
Constructor Summary
SourceCodeParser(java.io.File file)
           
SourceCodeParser(java.lang.String content)
           
 
Method Summary
private static void exception(Scanner sc, java.lang.String msg)
           
private  int getOffset(java.lang.String label, java.util.Hashtable map, boolean countingInstructionLength)
           
static void main(java.lang.String[] args)
           
 JavaClass parse()
           
private  Attribute parseAttribute()
           
private  void parseClass()
           
private  void parseClassAttributes()
           
private  void parseClassSignature()
           
private static double parseDouble(java.lang.String s)
           
private  Attribute_Code.ExceptionTableItem[] parseExceptionTable(java.lang.String s, java.util.Hashtable map)
          like : [Exception Table: start=line73 , end=line78 , handler=line78 , catch_type=java.lang.Exception]
private  Field parseField()
           
private  void parseFields()
           
private static float parseFloat(java.lang.String s)
           
private  Attribute_InnerClasses parseInnerClasses(java.lang.String s)
          like : [Inner Classes : access = final class , name = 0 , fullname = jce.TestClass$1 , outername = 0]
private static int parseInteger(java.lang.String s)
           
private  Attribute parseLineNumbers(java.lang.String s)
           
private  Attribute_LocalVariableTable parseLocalVariableTable(java.lang.String s, java.util.Hashtable map)
          like:jce.TestClass this start=line0, end=line0, index=0
private static long parseLong(java.lang.String s)
           
private  void parseMajorOrMinor()
           
private  void parseMaxStackOrLocals(Attribute_Code code)
           
private  Method parseMethod()
           
private  void parseMethodAttributes(Method method, java.util.ArrayList attributes, SourceCodeParser.LabeledInstructions li, Attribute_Code code, java.util.ArrayList codeAttributes)
          this method will parse method attribute: Deprecated, Synthetic and some of the attributes belongs to code: Max Locals, Max Stack,Local variale table, Exception table
private  SourceCodeParser.LabeledInstructions parseMethodInstructions(Method method)
           
private  void parseMethods()
           
private  void parseMethodSignature(Method method, java.util.ArrayList attributes)
          parse method declaration, and the throws clause , if any.
private  void preprocessConstantValues()
           
private  void updateLabelLinks(java.util.Hashtable labels, java.util.ArrayList toUpdate)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

scanner

private Scanner scanner

javaClass

JavaClass javaClass

cpl

ConstantPoolGenerator cpl

precompile

boolean precompile
Constructor Detail

SourceCodeParser

public SourceCodeParser(java.io.File file)
                 throws ParsingException

SourceCodeParser

public SourceCodeParser(java.lang.String content)
                 throws ParsingException
Method Detail

parse

public JavaClass parse()
                throws ParsingException
Throws:
ParsingException

preprocessConstantValues

private void preprocessConstantValues()
                               throws ParsingException
Throws:
ParsingException

parseClass

private void parseClass()
                 throws ParsingException,
                        GrammerException
Throws:
ParsingException
GrammerException

parseClassSignature

private void parseClassSignature()
                          throws ParsingException
Throws:
ParsingException

parseFields

private void parseFields()
                  throws ParsingException,
                         GrammerException
Throws:
ParsingException
GrammerException

parseField

private Field parseField()
                  throws ParsingException,
                         GrammerException
Throws:
ParsingException
GrammerException

parseMethods

private void parseMethods()
                   throws ParsingException,
                          GrammerException
Throws:
ParsingException
GrammerException

parseMethod

private Method parseMethod()
                    throws ParsingException,
                           GrammerException
Throws:
ParsingException
GrammerException

parseMethodAttributes

private void parseMethodAttributes(Method method,
                                   java.util.ArrayList attributes,
                                   SourceCodeParser.LabeledInstructions li,
                                   Attribute_Code code,
                                   java.util.ArrayList codeAttributes)
                            throws GrammerException,
                                   ParsingException
this method will parse method attribute: Deprecated, Synthetic and some of the attributes belongs to code: Max Locals, Max Stack,Local variale table, Exception table

Parameters:
method -
attributes -
Throws:
GrammerException
ParsingException

parseLineNumbers

private Attribute parseLineNumbers(java.lang.String s)

parseMethodInstructions

private SourceCodeParser.LabeledInstructions parseMethodInstructions(Method method)
                                                              throws ParsingException,
                                                                     GrammerException
Throws:
ParsingException
GrammerException

updateLabelLinks

private void updateLabelLinks(java.util.Hashtable labels,
                              java.util.ArrayList toUpdate)
                       throws GrammerException
Throws:
GrammerException

parseMethodSignature

private void parseMethodSignature(Method method,
                                  java.util.ArrayList attributes)
                           throws ParsingException,
                                  GrammerException
parse method declaration, and the throws clause , if any.

Parameters:
method -
Throws:
ParsingException
GrammerException

parseLocalVariableTable

private Attribute_LocalVariableTable parseLocalVariableTable(java.lang.String s,
                                                             java.util.Hashtable map)
                                                      throws ParsingException,
                                                             GrammerException
like:jce.TestClass this start=line0, end=line0, index=0

Parameters:
s -
map -
Throws:
ParsingException
GrammerException

parseExceptionTable

private Attribute_Code.ExceptionTableItem[] parseExceptionTable(java.lang.String s,
                                                                java.util.Hashtable map)
                                                         throws ParsingException,
                                                                GrammerException
like : [Exception Table: start=line73 , end=line78 , handler=line78 , catch_type=java.lang.Exception]

Parameters:
s -
map -
Returns:
Throws:
ParsingException
GrammerException - TODO: error reporting missing labels

getOffset

private int getOffset(java.lang.String label,
                      java.util.Hashtable map,
                      boolean countingInstructionLength)
               throws GrammerException
Parameters:
label -
map -
countingInstructionLength - if false, will return the starting offset of this insctruction. else will return the end offset of this instruction
Returns:
Throws:
GrammerException

parseAttribute

private Attribute parseAttribute()
                          throws GrammerException,
                                 ParsingException
Throws:
GrammerException
ParsingException

parseInnerClasses

private Attribute_InnerClasses parseInnerClasses(java.lang.String s)
                                          throws ParsingException,
                                                 GrammerException
like : [Inner Classes : access = final class , name = 0 , fullname = jce.TestClass$1 , outername = 0]

Parameters:
s -
Returns:
Throws:
ParsingException
GrammerException

parseClassAttributes

private void parseClassAttributes()
                           throws GrammerException,
                                  ParsingException
Throws:
GrammerException
ParsingException

parseMaxStackOrLocals

private void parseMaxStackOrLocals(Attribute_Code code)
                            throws ParsingException
Throws:
ParsingException

parseMajorOrMinor

private void parseMajorOrMinor()
                        throws GrammerException,
                               ParsingException
Throws:
GrammerException
ParsingException

parseInteger

private static int parseInteger(java.lang.String s)

parseLong

private static long parseLong(java.lang.String s)

parseFloat

private static float parseFloat(java.lang.String s)

parseDouble

private static double parseDouble(java.lang.String s)

exception

private static void exception(Scanner sc,
                              java.lang.String msg)
                       throws ParsingException
Throws:
ParsingException

main

public static void main(java.lang.String[] args)
                 throws java.lang.Exception
Throws:
java.lang.Exception