################################################################################ LEXICAL GRAMMAR ################################################################################ input = { inputelement } inputelement = whitespace | comment | token token = ident | number | string | '(' | ')' | ... /* to complete */ comment = '/' '/' { cchar } ident = letter { letter | digit | '_' } number = '0' | digit1 { digit } string = '"' { schar } '"' whitespace = ' ' | '\t' | '\f' | '\n' letter = 'a' | ... | 'z' | 'A' | ... | 'Z' digit = '0' | digit1 digit1 = '1' | ... | '9' cchar = all characters except for '\n' schar = all characters except for '\n' and '"' ################################################################################ SYNTACTICAL GRAMMAR ################################################################################ Program = { ClassDecl } Expression ClassDecl = "class" ident [ "extends" ident ] "{" { Member } "}" Member = FieldDecl | MethodDef FieldDecl = Formal ";" MethodDef = Formal "(" [ Formal { "," Formal} ] ")" Block Formal = Type ident Block = "{" { Statement } [ "return" Expression ] "}" Type = "Int" | "Null" | ident Statement = "while" "(" Expression ")" "{" { Statement } "}" | Formal "=" Expression ";" | ident "=" Expression ";" | Expression ";" | "printInt" "(" Expression ")" ";" | "printChar" "(" Expression ")" ";" Expression = "if" "(" Expression ")" Expression [ "else" Expression ] | CmpExpression CmpExpression = [ SumExpression CompOp ] SumExpression CompOp = "==" | "!=" | "<" | ">" | "<=" | ">=" SumExpression = Term | SumExpression SumOp Term SumOp = "+" | "-" | "||" Term = [ Term ProdOp ] [ NegateOp ] Factor NegateOp = "-" | "!" ProdOp = "*" | "/" | "%" | "&&" Factor = ident | number | string | "true" | "false" | "this" | "null" | "readInt" | "readChar" | "(" Expression ")" | Block | "new" ident Params | Factor "." ident | Factor "." ident Params Params = "(" Expressions ")" Expressions = [ Expression { "," Expression } ] ################################################################################ $Id$