#if !defined(_PARSER_H_) #define _PARSER_H_ #include "figures.h" #include "drawable_list.h" #include "statement_list.h" #include "conditional.h" #include "figure.h" #include "graphics_context.h" #include "symbol_table.h" #include "exprparser.h" #include "lexer.h" #include struct parse_error { char error[256]; int line_number; parse_error(int,const char* = "parse error"); }; class parser { private: lexer lex; expression_parser exprparser; double xmin, xmax, ymin, ymax; int xres, yres; graphics_context gc; symbol_table T; double read_eval_exp(istream&,list&,double*); coordinate read_coordinate(istream&,list&,double*); color read_color(istream&,list&,double*); point* read_point(istream&,list&,double*); line* read_line(istream&,list&,double*); rectangle* read_rectangle(istream&,list&,double*); triangle* read_triangle(istream&,list&,double*); square* read_square(istream&,list&,double*); ellipse* read_ellipse(istream&,list&,double*); circle* read_circle(istream&,list&,double*); void read_figure(istream&,list&,double*,drawable_list&, figure_descriptor*); void read_shape(istream&,list&,double*,drawable_list&); void read_coordinate_expression(istream&,list&, expression*&, expression*&); conditional* read_conditional(istream&,list&); set_color* read_set_color(istream&,list&); set_single_val* read_set_single_val(istream&,list&); set_rotation_center* read_set_rotation_center(istream&,list&); draw_point* read_draw_point(istream&,list&); draw_line* read_draw_line(istream&,list&); draw_circle* read_draw_circle(istream&,list&); draw_square* read_draw_square(istream&,list&); draw_rectangle* read_draw_rectangle(istream&,list&); draw_ellipse* read_draw_ellipse(istream&,list&); draw_triangle* read_draw_triangle(istream&,list&); draw_figure* read_draw_figure(istream&,list&,figure_descriptor*); statement* read_statement(istream&,list&); void read_figure_descriptor(istream&); public: parser(); void parse(drawable_list&,istream&); int x_resolution() const; int y_resolution() const; }; #endif