%{ open Types %} %token CONST %token LPAR RPAR EOF POINT COMMA %right COMMA %left POINT %start main %type main %% main: nest EOF { $1 }; scalar: CONST { Scalar(float_of_string $1) } | CONST POINT { Scalar(float_of_string $1) } | CONST POINT CONST { Scalar(float_of_string ($1 ^ "." ^ $3)) }; vector: LPAR nestpar RPAR { Vector($2) }; nestpar: nest { Unary($1) } | nest COMMA nestpar { Binary($1,$3) }; nest: scalar { $1 } | vector { $1 };