edu.iu.cnets.klatsch.parser
Class Parser

java.lang.Object
  extended by edu.iu.cnets.klatsch.parser.Parser

public class Parser
extends java.lang.Object

This class contains the recursive-descent parser for the Klatsch language.


Field Summary
(package private)  TokenStream stream
           
 
Constructor Summary
Parser(TokenStream stream)
          Initializes a new parser with the given stream of tokens.
 
Method Summary
 Expression[] read()
          Attempts to read a program from the token stream.
private  EBlock readBlock()
          [block] ::= BEGIN [program] END
private  EDictionary readDictionary()
          [dictionary] ::= { [bind-list] }
private  EDo readDo()
          [do] ::= DO [exp] WHILE [exp]
private  Expression readExp0()
          [exp0] ::= [exp1] | [exp1] = [expression]
private  Expression readExp1()
          [exp1] ::= [exp2] | [exp2] && [exp1]
private  Expression readExp10()
          [exp10] ::= [exp11] | [exp11] ( [exp-list] ) | [exp11] .
private  Expression readExp11()
          [exp11] ::= [literal] | [lvalue] | ( [expression] )
private  Expression readExp2()
          [exp2] ::= [exp3] | [exp3] && [exp2]
private  Expression readExp3()
          [exp3] ::= [exp4] | ! [exp3]
private  Expression readExp4()
          [exp4] ::= [exp5] | [exp5] == [exp4] | [exp5] != [exp4]
private  Expression readExp5()
          [exp5] ::= [exp6] | [exp6] < [exp5] | [exp6] <= [exp5] | [exp6] > [exp5] | [exp6] >= [exp5]
private  Expression readExp6()
          [exp6] ::= [exp7] | [exp7] + [exp6] | [exp7] - [exp6]
private  Expression readExp7()
          [exp7] ::= [exp8] | [exp8] * [exp7] | [exp8] / [exp7] | [exp8] % [exp7]
private  Expression readExp8()
          [exp8] ::= [exp9] | + [exp8] | - [exp8]
private  Expression readExp9()
          [exp9] ::= [exp10] | [exp10] ** [exp9]
private  Expression readExpression()
          [expression] ::= [exp0] | [if] | [begin] | [proc] | [while] | [do] | [for]
private  Expression[] readExpressionList()
          [exp-list] ::= @ | [expression] , [exp-list]
private  EFor readFor()
          [for] ::= FOR [id] IN [exp] [exp]
private  java.lang.String[] readIdList()
          [id-list] ::= @ | [id] , [id-list]
private  EIf readIf()
          [if] ::= IF [exp] THEN [exp] | IF [exp] THEN [exp] ELSE [exp]
private  EList readList()
          [list] ::= [ [exp-list] ]
private  Expression readLiteral()
          [literal] ::= [STRING] | [NUMBER] | [set] | [list]
private  Expression readLValue()
          [lvalue] ::= [ID]
private  Pair readPair()
          [pair] ::= [exp] : [exp]
private  Pair[] readPairList()
          [pair-list] ::= @ | [pair] , [pair-list]
private  EProcedure readProc()
          [proc] ::= PROC ( [id-list] ) [expression]
private  Expression[] readProgram()
          [program] ::= @ | [expression] ; [program]
private  EWhile readWhile()
          [while] ::= WHILE [exp] [exp]
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

stream

TokenStream stream
Constructor Detail

Parser

public Parser(TokenStream stream)
Initializes a new parser with the given stream of tokens.

Parameters:
stream - the stream of tokens
Method Detail

read

public Expression[] read()
                  throws ParserException
Attempts to read a program from the token stream. Returns the program (i.e. sequence of Expressions on success and null if nothing could be read.

Throws:
ParserException

readBlock

private EBlock readBlock()
                  throws ParserException
[block] ::= BEGIN [program] END

Throws:
ParserException

readDictionary

private EDictionary readDictionary()
                            throws ParserException
[dictionary] ::= { [bind-list] }

Throws:
ParserException

readDo

private EDo readDo()
            throws ParserException
[do] ::= DO [exp] WHILE [exp]

Throws:
ParserException

readExpression

private Expression readExpression()
                           throws ParserException
[expression] ::= [exp0] | [if] | [begin] | [proc] | [while] | [do] | [for]

Throws:
ParserException

readExpressionList

private Expression[] readExpressionList()
                                 throws ParserException
[exp-list] ::= @ | [expression] , [exp-list]

Throws:
ParserException

readExp0

private Expression readExp0()
                     throws ParserException
[exp0] ::= [exp1] | [exp1] = [expression]

Throws:
ParserException

readExp1

private Expression readExp1()
                     throws ParserException
[exp1] ::= [exp2] | [exp2] && [exp1]

Throws:
ParserException

readExp2

private Expression readExp2()
                     throws ParserException
[exp2] ::= [exp3] | [exp3] && [exp2]

Throws:
ParserException

readExp3

private Expression readExp3()
                     throws ParserException
[exp3] ::= [exp4] | ! [exp3]

Throws:
ParserException

readExp4

private Expression readExp4()
                     throws ParserException
[exp4] ::= [exp5] | [exp5] == [exp4] | [exp5] != [exp4]

Throws:
ParserException

readExp5

private Expression readExp5()
                     throws ParserException
[exp5] ::= [exp6] | [exp6] < [exp5] | [exp6] <= [exp5] | [exp6] > [exp5] | [exp6] >= [exp5]

Throws:
ParserException

readExp6

private Expression readExp6()
                     throws ParserException
[exp6] ::= [exp7] | [exp7] + [exp6] | [exp7] - [exp6]

Throws:
ParserException

readExp7

private Expression readExp7()
                     throws ParserException
[exp7] ::= [exp8] | [exp8] * [exp7] | [exp8] / [exp7] | [exp8] % [exp7]

Throws:
ParserException

readExp8

private Expression readExp8()
                     throws ParserException
[exp8] ::= [exp9] | + [exp8] | - [exp8]

Throws:
ParserException

readExp9

private Expression readExp9()
                     throws ParserException
[exp9] ::= [exp10] | [exp10] ** [exp9]

Throws:
ParserException

readExp10

private Expression readExp10()
                      throws ParserException
[exp10] ::= [exp11] | [exp11] ( [exp-list] ) | [exp11] . [ID] ( [exp-list] )

Throws:
ParserException

readExp11

private Expression readExp11()
                      throws ParserException
[exp11] ::= [literal] | [lvalue] | ( [expression] )

Throws:
ParserException

readFor

private EFor readFor()
              throws ParserException
[for] ::= FOR [id] IN [exp] [exp]

Throws:
ParserException

readIdList

private java.lang.String[] readIdList()
                               throws ParserException
[id-list] ::= @ | [id] , [id-list]

Throws:
ParserException

readIf

private EIf readIf()
            throws ParserException
[if] ::= IF [exp] THEN [exp] | IF [exp] THEN [exp] ELSE [exp]

Throws:
ParserException

readList

private EList readList()
                throws ParserException
[list] ::= [ [exp-list] ]

Throws:
ParserException

readLiteral

private Expression readLiteral()
                        throws ParserException
[literal] ::= [STRING] | [NUMBER] | [set] | [list]

Throws:
ParserException

readLValue

private Expression readLValue()
                       throws ParserException
[lvalue] ::= [ID]

Throws:
ParserException

readPair

private Pair readPair()
               throws ParserException
[pair] ::= [exp] : [exp]

Throws:
ParserException

readPairList

private Pair[] readPairList()
                     throws ParserException
[pair-list] ::= @ | [pair] , [pair-list]

Throws:
ParserException

readProc

private EProcedure readProc()
                     throws ParserException
[proc] ::= PROC ( [id-list] ) [expression]

Throws:
ParserException

readProgram

private Expression[] readProgram()
                          throws ParserException
[program] ::= @ | [expression] ; [program]

Throws:
ParserException

readWhile

private EWhile readWhile()
                  throws ParserException
[while] ::= WHILE [exp] [exp]

Throws:
ParserException