2016-12-21 5 views
0

私は次のコードをexprのように後に持っている:int {} | BOOL {}などしかし、私はこのパーサーの型で書く必要があります型がわからない、私はint型で動作する電卓の例がintですが、私のプログラムで浮動小数点文字の文字列など..ありがとうあなたの文法から判断言語用のocamlyaccを使ってパーサーを作成しようとしていますが、どのような型を入れるべきですか?

%{ 
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;; 

答えて

2

それはあなたが解析しない表現であるため、戻り値の型は、expressionのようなものでなければなりません。その型をどのように定義するかは、実装するセマンティクスによって異なります。私は、少なくともintboolfloatおよびcharのタイプの原子を保持できるバリアント型が必要であると思います。だからあなたは

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

で始まり、どこから来るのかを知ることができます。

関連する問題