jbet
Class Lexer

java.lang.Object
  extended by jbet.Lexer

public class Lexer
extends java.lang.Object

Lexical analyzer for JBET. This methods is used to lex command lines/files, and JBET assembler. This lexer uses a maximum of 2 lookahead character and tokens. This file contains fields that store 1) the lexer's current state 2) the input stream 3) the state stack 4) the look ahead buffers for characters and tokens. This class has many externally used methods marked by "used externally." The readch_lowlevel() and read_token() methods do most of the work. TBC. $Id: Lexer.java,v 1.22 2003/09/09 17:31:54 areisse Exp $


Field Summary
static int ST_ASM
           
static int ST_ASM_ARG
           
static int ST_COMMENT
           
static int ST_CONST
           
static int ST_DASH
           
static int ST_NORMAL
           
static int ST_OPT
           
static int ST_STRING
           
static int ST_TAG
           
static int ST_TYPE
           
 
Constructor Summary
Lexer(java.io.InputStream is, java.lang.String fn)
           
Lexer(java.io.Reader reader, java.lang.String fn)
           
 
Method Summary
 void die(java.lang.String msg)
           
 ClassInfo getClass(java.lang.String defclass)
           
 ClassInfo[] getClasses()
          get a bunch of classes.
 void getClasses(java.util.Collection classes)
           
 void getClasses(java.util.Collection classes, ClassFinder f)
           
 void getClassNames(java.util.Collection classes)
           
 void getClassNames(java.util.Collection classes, boolean sense)
           
 MethodInfo getMethod(java.lang.String defclass)
           
 java.lang.Object getThing(java.lang.String defclass)
          parse a class, method, or field, load it and return.
 Token justread()
           
 Token match(int type)
           
 Descriptor parse_descriptor()
           
 double parse_double()
           
 Thing parse_element_with_default(java.lang.String def, boolean opttype)
          parses a method or field, with a default class name.
 int parse_flags(int ok)
           
 int parse_int()
           
 long parse_long()
           
 java.lang.String parse_name()
           
 java.lang.String parse_optclassname(java.lang.String default_class)
           
 java.lang.String parse_string()
           
 Thing parse_thing(java.lang.String defclass)
           
 Thing parse_thing(java.lang.String defclass, int flags)
           
 Type parse_type()
           
 Descriptor parseOptDescriptor(java.lang.String cname, java.lang.String mname)
           
 Type parseOptType(java.lang.String cname, java.lang.String fname)
           
 Token peek()
           
 void pop()
           
 void push(int s)
           
 Token read()
           
 void setstate(int s)
           
 void term()
           
 void unexpected(Token tok)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ST_TAG

public static final int ST_TAG
See Also:
Constant Field Values

ST_OPT

public static final int ST_OPT
See Also:
Constant Field Values

ST_DASH

public static final int ST_DASH
See Also:
Constant Field Values

ST_NORMAL

public static final int ST_NORMAL
See Also:
Constant Field Values

ST_TYPE

public static final int ST_TYPE
See Also:
Constant Field Values

ST_STRING

public static final int ST_STRING
See Also:
Constant Field Values

ST_CONST

public static final int ST_CONST
See Also:
Constant Field Values

ST_ASM

public static final int ST_ASM
See Also:
Constant Field Values

ST_ASM_ARG

public static final int ST_ASM_ARG
See Also:
Constant Field Values

ST_COMMENT

public static final int ST_COMMENT
See Also:
Constant Field Values
Constructor Detail

Lexer

public Lexer(java.io.Reader reader,
             java.lang.String fn)

Lexer

public Lexer(java.io.InputStream is,
             java.lang.String fn)
Method Detail

push

public void push(int s)

pop

public void pop()

peek

public Token peek()

setstate

public void setstate(int s)

read

public Token read()

justread

public Token justread()

die

public void die(java.lang.String msg)

unexpected

public void unexpected(Token tok)

match

public Token match(int type)

term

public void term()

parse_name

public java.lang.String parse_name()

parse_string

public java.lang.String parse_string()

parse_descriptor

public Descriptor parse_descriptor()

parse_type

public Type parse_type()

parse_long

public long parse_long()

parse_int

public int parse_int()

parse_double

public double parse_double()

parse_flags

public int parse_flags(int ok)

parseOptDescriptor

public Descriptor parseOptDescriptor(java.lang.String cname,
                                     java.lang.String mname)
                              throws ClassFileException
Throws:
ClassFileException

parseOptType

public Type parseOptType(java.lang.String cname,
                         java.lang.String fname)
                  throws ClassFileException
Throws:
ClassFileException

parse_optclassname

public java.lang.String parse_optclassname(java.lang.String default_class)

parse_thing

public Thing parse_thing(java.lang.String defclass)

parse_thing

public Thing parse_thing(java.lang.String defclass,
                         int flags)

getThing

public java.lang.Object getThing(java.lang.String defclass)
                          throws ClassFileException,
                                 ElementNotFoundException
parse a class, method, or field, load it and return. this will throw an exception if it fails, so you can just call it and assume that it worked.

Parameters:
defclass - the default class
Throws:
ClassFileException
ElementNotFoundException

getMethod

public MethodInfo getMethod(java.lang.String defclass)
                     throws ClassFileException,
                            ElementNotFoundException
Throws:
ClassFileException
ElementNotFoundException

getClass

public ClassInfo getClass(java.lang.String defclass)
                   throws ClassFileException,
                          ElementNotFoundException
Throws:
ClassFileException
ElementNotFoundException

getClasses

public ClassInfo[] getClasses()
                       throws ClassFileException
get a bunch of classes. supports @/foo/bar/* notation for all the classes in a package

Throws:
ClassFileException

getClassNames

public void getClassNames(java.util.Collection classes)
                   throws ClassFileException
Throws:
ClassFileException

getClassNames

public void getClassNames(java.util.Collection classes,
                          boolean sense)
                   throws ClassFileException
Throws:
ClassFileException

getClasses

public void getClasses(java.util.Collection classes)
                throws ClassFileException
Throws:
ClassFileException

getClasses

public void getClasses(java.util.Collection classes,
                       ClassFinder f)
                throws ClassFileException
Throws:
ClassFileException

parse_element_with_default

public Thing parse_element_with_default(java.lang.String def,
                                        boolean opttype)
                                 throws java.lang.Exception
parses a method or field, with a default class name. Using 2 lookahead here is safe. 3 would not be. I would really like a rewindable multistate lexer, but that's a little heavy for my meager requirements here

Parameters:
def - default class
opttype - true if you want it to accept a type.
Throws:
java.lang.Exception