www.pudn.com > Micro.rar > Syntax.h


#pragma once 
 
#include "common.h" 
#include "Lex.h" 
#include "Semantic.h" 
 
 
class Syntax 
{ 
public: 
	Syntax(void); 
	~Syntax(void); 
}; 
/* 
		-> begin  end 
 ->  } 
		->  := ; 
		->  ); 
		-> (  ); 
		-> ID {, ID} 
		->  {, } 
	->  {   } 
		->  
		-> ID 
		-> INTLITERAL 
		-> PLUSOP 
		-> MINUSOP 
		-> PLUSOP 
		-> MINUSOP 
	->  SCANEOF 
带语义处理的表示: #xxxx表示对应的处理函数 
		-> #start  begin  end 
 ->  } 
		->  :=   #assign ; 
		-> read  (  ); 
		-> write (  ); 
		->   #read_id  {,   #read_id  } 
		->   #write_expr  {,   #write_expr  } 
	->  {    #gen_infix  } 
		-> (  ) 
		->  
		-> INTLITERAL #process_literal 
		-> PLUSOP     #process_op 
		-> MINUSOP    #process_op 
			-> ID         #process_id 
	->  SCANEOF #finish 
 
进行语法扩展 
      ->  SCANEOF #finish 
          -> #start   {,  } 
         -> function   (  ) begin  end 
         -> function   (              ) begin  end 
    ->  {  } 
        ->  :=   #assign ; 
        -> read(  ); 
        -> write (  ); 
        ->  (  ) #process_func_call; 
        ->  (                 ) #process_func_call; 
       ->  #process_param {,  #process_param } 
    ->  #process_argu {,  #process_argu } 
        ->   #read_id  {,   #read_id  } 
       ->   #write_expr  {,   #write_expr  } 
       ->  {    #gen_infix  } 
         ->  {   } 
          -> (  ) 
          ->  
          -> INTLITERAL #process_literal 
           -> PLUSOP     #process_op 
           -> MINUSOP    #process_op 
           -> MULOP      #process_op 
           -> DIVOP      #process_op 
            -> ID         #process_id 
			   -> ID         #gen_func_name 
*/ 
void		system_goal		(void); 
void		program			(void); 
void		function		(void);// new added 
void		statement_list	(void); 
void		statement		(void); 
void		param_list		(void);// new added 
void		argument_list	(void);// new added 
void		read_list		(void);// id_list 
void		write_list		(void);// expr_list 
void		expression		(expr_rec *); 
void		mul_expr		(expr_rec *);// new added 
void		primary			(expr_rec *); 
void		add_op			(op_rec   *); 
void		mul_op			(op_rec   *); 
void		ident			(expr_rec *); 
void		fname			(expr_rec *);// new added 
 
token next_token(); 
void  match(token); 
 
void syntax_error(token);