| | /* zweic -- a compiler for zwei |
---|
| | * |
---|
| | * Stephane Micheloud & LAMP |
---|
| | * |
---|
| | * $Id$ |
---|
| | */ |
---|
| | |
---|
| | package zweic; |
---|
| | |
---|
| |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | /** |
---|
| | * CmpExpression = [ SumExpression CompOp ] SumExpression |
---|
| | * MyCmpExpression = SumExpression { CompOp SumExpression } |
---|
| | */ |
---|
| | private def cmpExpression(): Expr = { |
---|
| | var left = sumExpression(); |
---|
| |
---|
| | // TODO: make this less dirty |
---|
| | if ( str.length() > 1 ) { |
---|
| | return New(Name("Cons"), IntLit(str.charAt(0).asInstanceOf[Int])::_string(str.substring(1))::Nil); |
---|
| | } else { |
---|
| | return New(Name("Cons"), IntLit(str.charAt(0).asInstanceOf[Int])::New(Name("Nil"), Nil)::Nil); |
---|
| | return New(Name("Cons"), New(Name("Nil"), Nil)::Nil); |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | /** |
---|
| |
---|
| | |
---|
| | /** |
---|
| | * Expressions = [ Expression { "," Expression } ] |
---|
| | */ |
---|
| | private def expressions(): List[Expr] = { |
---|
| | var rval:List[Expr] = Nil; |
---|
| | if ( IF :: SUB :: NOT :: IDENT :: NUMBER :: STRING :: TRUE :: FALSE :: THIS |
---|
| | :: NULLFACTOR :: READINT :: READCHAR :: LPAREN :: NEW :: LACCOLADE :: Nil |
---|
| | contains token) { |
---|
| | rval = expression() :: Nil; |
---|
| | while ( check(PERIOD) ) { |
---|
| | rval = expression() :: rval; |
---|
| | } |
---|
| | } |
---|
| | return rval.reverse; |
---|
| | } |
---|
| | private def expressions(): List[Expr] = |
---|
| | return ( |
---|
| | if ( IF::SUB::NOT::IDENT::NUMBER::STRING::TRUE::FALSE::THIS::NULLFACTOR |
---|
| | ::READINT::READCHAR::LPAREN::NEW::LACCOLADE::Nil contains token) { |
---|
| | var rval = expression() :: Nil; |
---|
| | while ( check(PERIOD) ) { |
---|
| | rval = expression() :: rval; |
---|
| | } |
---|
| | rval; |
---|
| | } else Nil).reverse; |
---|
| | |
---|
| | /** |
---|
| | * Params = "(" Expressions ")" |
---|
| | */ |
---|
| |
---|
| | |