我有以下代码也有更多像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;;
答案 0 :(得分:2)
从你的语法判断,返回类型应该类似expression
,因为它是你解析的表达式。如何定义该类型取决于您要实现的语义。我猜你需要一种至少可以保存int
,bool
,float
和char
类型原子的变体类型。所以你可以从
type expression =
| Int of int
| Bool of bool
| Float of float
| Char of char
并查看它的用途。