我正在尝试使用ocamlyacc为语言制作一个解析器,但我应该放什么类型?

时间:2016-12-21 05:09:02

标签: parsing ocaml ocamllex ocamlyacc menhir

我有以下代码也有更多像expr之后:int {} | BOOL {}等但我不知道我应该在这个解析器的类型中写什么类型,我有一个计算器示例,使用int和类型是int,但在我的程序中我有浮点字符串等..谢谢

  %{
dont know what to write here

 %}

 %token <int> INT
 %token <float> FLOAT
 %token <char> CHAR
 %token <bool> BOOL
 %token <string> IDENT
 %token PLUS Div Bigger Smaller MINUS TIMES 
%token TYPE
%token DEF DD
%token Equals Atribuicao SoE BoE And Or
%token IF ELSE BEGIN END WHILE RETURN PV SEQ TO BY OF 
%token RP LP LB RB  
%token EOL
%left Bigger Smaller SoE BoE Equals Atribuicao Or And
%left PLUS MINUS       
%left TIMES Div        
%nonassoc UMINUS OF  

%start main          

%type <> main /* what should be in here ? */


main:
| expr EOL                { $1 }
expr:           
  INT                   {  }    
| BOOL                  {  }  
| FLOAT                 {  }
| CHAR                  {  } 
| expr OF expr              {   }
| BEGIN expr END            {   }
| RETURN expr PV            { $2 }
| LP expr RP                { $2 }
| LB expr RB                { $2 } 
| expr PLUS expr            {  }
| expr MINUS expr           {  }
| expr TIMES expr               {  }
%%

let main() = begin
 Printf.printf "Hello yo\n" ;

end;;

1 个答案:

答案 0 :(得分:2)

从你的语法判断,返回类型应该类似expression,因为它是你解析的表达式。如何定义该类型取决于您要实现的语义。我猜你需要一种至少可以保存intboolfloatchar类型原子的变体类型。所以你可以从

开始
type expression =
| Int of int
| Bool of bool
| Float of float
| Char of char

并查看它的用途。