Bonjour,
simple : ocamlc m'envoie ch*** alors que ocamlyacc lui a genere sans broncher :
/* File parser.mly */
%{
type equa =
£spaces£ £/spaces£|Val of float
£spaces£ £/spaces£|Var of string
£spaces£ £/spaces£|Fun of string*(equa)*string
£spaces£ £/spaces£|UOp of string*(equa)
£spaces£ £/spaces£|Op of string*(equa)*(equa)
;;
%}
%token REAL INT
%token VAR
%token PLUS MINUS
%token TIMES DIV POW
%token LPAREN RPAREN
%token LOG TAN SIN COS
%token EOL
%token PI E
%token Leol
%left PLUS MINUS
%left TIMES DIV
%left POW
%right LPAREN COS SIN TAN LOG
%nonassoc UMINUS
%start debut
%type debut
%%
debut:
£spaces£ £/spaces£expr Leol {$1}
;
expr:
£spaces£ £/spaces£VAR { Var($1) }
£spaces£ £/spaces£|PI { Val(3.1415926535898) }
£spaces£ £/spaces£|E { Val(2.718281828459) }
£spaces£ £/spaces£|REAL { Val($1) }
£spaces£ £/spaces£|INT { Val($1) }
£spaces£ £/spaces£|LPAREN expr RPAREN { Fun("(",$2,")") }
£spaces£ £/spaces£|COS expr RPAREN { Fun("cos(",$2,")") }
£spaces£ £/spaces£|SIN expr RPAREN { Fun("sin(",$2,")") }
£spaces£ £/spaces£|TAN expr RPAREN { Fun("tan(",$2,")") }
£spaces£ £/spaces£|LOG expr RPAREN { Fun("ln(",$2,")") }
£spaces£ £/spaces£|expr POW expr { Op("^",$1,$3) }
£spaces£ £/spaces£|expr PLUS expr { Op("+",$1,$3) }
£spaces£ £/spaces£|expr MINUS expr { Op("-",$1,$3) }
£spaces£ £/spaces£|expr TIMES expr { Op("*",$1,$3) }
£spaces£ £/spaces£|expr DIV expr { Op("/",$1,$3) }
£spaces£ £/spaces£|MINUS expr %prec UMINUS { UOp("-",$2) }
;
%%
a compiler avec :
ocamlyacc parser.mly
ocamlc -c parser.mli
mon erreur :
ocamllex lexer.mll
33 states, 654 transitions, table size 2814 bytes
ocamlyacc parser.mly
ocamlc -w A -i -c parser.mli
File "parser.mli", line 22, characters 48-52:
Unbound type constructor equa
*** Error code 2
Stop.
fichier parser.mli genere par ocamlyacc :
type token =
£spaces£ £/spaces£REAL of (float)
£spaces£ £/spaces£| INT of (float)
£spaces£ £/spaces£| VAR of (string)
£spaces£ £/spaces£| PLUS
£spaces£ £/spaces£| MINUS
£spaces£ £/spaces£| TIMES
£spaces£ £/spaces£| DIV
£spaces£ £/spaces£| POW
£spaces£ £/spaces£| LPAREN
£spaces£ £/spaces£| RPAREN
£spaces£ £/spaces£| LOG
£spaces£ £/spaces£| TAN
£spaces£ £/spaces£| SIN
£spaces£ £/spaces£| COS
£spaces£ £/spaces£| EOL
£spaces£ £/spaces£| PI
£spaces£ £/spaces£| E
£spaces£ £/spaces£| Leol
val debut :
£spaces£ £/spaces£(Lexing.lexbuf -> token) -> Lexing.lexbuf -> equa
Une idee ?
# Un problème avec OCAMLYACC
Posté par Alexandre Dupas . Évalué à 2.
type equa =
|Val of float
|Var of string
|Fun of string*(equa)*string
|UOp of string*(equa)
|Op of string*(equa)*(equa)
;;
au debut du fichier .mli
C'est ce que fait le YACC original en C.
Donc il faudrait que tu mettes toi même à la main cette définition en tête du fichier .mli et l'erreur qu'il te propose ne devrait plus exister.
[^] # Re: Un problème avec OCAMLYACC
Posté par vincent LECOQ (site web personnel) . Évalué à 1.
pour l'utilisateur,devoir faire des modifs a la mimine ca va pas lui plaire .
Et puis ocamlyacc doit bien pouvoir faire ca non ? ce serait bete !
[^] # Re: Un problème avec OCAMLYACC
Posté par Tramo Piere . Évalué à 2.
http://www.kde-apps.org/content/show.php?content=14542(...)
# Facile
Posté par Vivi (site web personnel) . Évalué à 2.
equa.mli:
type equa = blablabla ...
parser.mly
%{
open Equa
%}
...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.