%% %class scanner %unicode %line %column %byaccj %{ /* store a reference to the parser object */ private Parser yyparser; /* constructor taking an additional parser */ public scanner (java.io.Reader r, Parser yyparser) { this (r); this.yyparser = yyparser; } /* return the current line number. We need this because yyline is made private and we don't have a mechanism like extern in C. */ public int getLine() { return yyline; } %} %% and {return Parser.AND_T;} array {return Parser.ARRAY_T;} begin {return Parser.BEGIN_T;} do {return Parser.DO_T;} else {return Parser.ELSE_T;} end {return Parser.END_T;} function {return Parser.FUNCTION_T;} if {return Parser.IF_T;} integer {return Parser.INTEGER_T;} mod {return Parser.MOD_T;} not {return Parser.NOT_T;} of {return Parser.OF_T;} or {return Parser.OR_T;} procedure {return Parser.PROCEDURE_T;} program {return Parser.PROGRAM_T;} read {return Parser.READ_T;} real {return Parser.REAL_T;} then {return Parser.THEN_T;} var {return Parser.VAR_T;} while {return Parser.WHILE_T;} write {return Parser.WRITE_T;} \[ {return (int) yycharat(0);} \] {return (int) yycharat(0);} \( {return (int) yycharat(0);} \) {return (int) yycharat(0);} \; {return (int) yycharat(0);} \: {return (int) yycharat(0);} \. {return (int) yycharat(0);} \, {return (int) yycharat(0);} \+ {return (int) yycharat(0);} \- {return (int) yycharat(0);} \* {return (int) yycharat(0);} \/ {return (int) yycharat(0);} ".." {return Parser.DOTDOT; } ":=" {return Parser.ASSIGN_OP; } "=" {return Parser.REL_OP; } "<>" {return Parser.REL_OP; } "<=" {return Parser.REL_OP; } ">=" {return Parser.REL_OP; } "<" {return Parser.REL_OP; } ">" {return Parser.REL_OP; } [a-zA-Z][a-zA-Z0-9]* {return Parser.ID;} [+-]?[0-9]+ {return Parser.NUM;} [+-]?[0-9]+"."[0-9]+ {return Parser.REAL_NUM;} \{[^}{]*\} { } [ \t\n] { }