Commit 33084248 by fpottier

Switch to ocamlbuild.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/menhir@331 0f8b5475-4b4e-0410-85a8-ee3154a6bfe7
parent 6a23aac9
2013/03/02:
Switched to ocamlbuild. Many thanks to Daniel Weil for offering
very useful guidance.
2013/01/16:
"menhir --depend" was broken since someone added new whitespace in the output
of ocamldep. Fixed.
......
......@@ -2,13 +2,8 @@
that was reached? this would allow some people to produce better error
messages (Pippijn van Steenhoven). Incompatible change?
* BUG: le Makefile ne fonctionne pas avec -j (email de Florent Hivert)
* projet amusant: si l'automatique est canonique et si on n'a pas trop
optimisé le contenu de la pile, alors en cas d'erreur, on doit pouvoir
analyser le contenu de la pile pour produire un suffixe de l'entrée qui
aurait conduit à une acceptation. Ça trouerait le C** comme message
d'explication!
* _stage2/menhir.native --interpret fancy-parser.mly
crashes with Stack_overflow when the input is just "grammar:\n"
* Les fichiers dans examples/ ne devraient pas être sous QPL mais libres...
......@@ -21,7 +16,8 @@
non-terminaux), non? (Jacques-Henri.)
* les positions fournies par menhir ne sont pas les mêmes fournies par
ocamlyacc (voir messages de Tiphaine Turpin à partir du 30/08/2011). Est-ce un problème? Peut-on documenter quelles sont les
ocamlyacc (voir messages de Tiphaine Turpin à partir du 30/08/2011).
Est-ce un problème? Peut-on documenter quelles sont les
positions fournies par Menhir? En particulier, pour une production
vide, Menhir utilise _menhir_env.lexer.lex_start_p, c'est-à-dire le
début du dernier token lu par le lexer; en principe c'est le token
......@@ -79,9 +75,6 @@
* Permettre trois modes pour --trace: toujours, si variable d'environnement
activée, ou jamais
* peut-on éviter d'avoir pour les états des "raw numbers" et des "numbers"
totalement différents?
* (petit) BUG: --follow-construction n'affiche pas le contenu des états
initiaux (r0)
......@@ -95,8 +88,6 @@
ou pas; faut-il faire grossir les états existants, ou bien (par exemple) les
supprimer et recommencer leur construction?
* regarder du côté de Tattoo (Julien Cervelle)
* que fait/que doit faire la combinaison --tokens-only --depend?
* Préserver dirname/ dans les directives #line émises.
......@@ -129,8 +120,6 @@
* Appliquer cette même technique aux conflits? Le programmeur liste une phrase
et un token de lookahead, et indique quelle action il veut dans ce cas...
* Réfléchir à GLR
* Faire co-exister l'automate avant et après résolution des conflits;
tenter d'expliquer chaque conflit en termes du second, si impossible
alors en termes du premier; faire en sorte que les numéros d'états
......
# Tag both parser source files with origin_parser.
<{yacc-parser,fancy-parser}.mly>:origin_parser
# Menhir needs the Unix library.
<menhir.{byte,native}>: use_unix
# checkOCamlVersion needs the Str library.
<checkOCamlVersion.byte>: use_str
<sentenceParser.{ml,mli}>: use_ocamlyacc
# Build and link with -g.
<**/*.{cmo,cmx}>:debug
<**/*.byte>:debug
<**/*.native>:debug
# Every module that is part of MenhirLib must be tagged as such.
# If you change this list, please also update the files LICENSE
# and GNUmakefile in the toplevel directory.
<infiniteArray.cmx>: for-pack(MenhirLib)
<packedIntArray.cmx>: for-pack(MenhirLib)
<rowDisplacement.cmx>: for-pack(MenhirLib)
<engineTypes.cmx>: for-pack(MenhirLib)
<engine.cmx>: for-pack(MenhirLib)
<tableFormat.cmx>: for-pack(MenhirLib)
<tableInterpreter.cmx>: for-pack(MenhirLib)
<convert.cmx>: for-pack(MenhirLib)
(* The main program. *)
(* Everything is in [Back]. *)
open Back
# If you change this list, please also update the files LICENSE
# and GNUmakefile in the toplevel directory.
InfiniteArray
PackedIntArray
RowDisplacement
EngineTypes
Engine
TableFormat
TableInterpreter
Convert
open Ocamlbuild_plugin
open Command
(* ---------------------------------------------------------------------------- *)
(* Compilation flags. *)
let flags () =
(* -inline 1000 *)
flag ["ocaml"; "compile"; "native"] (S [A "-inline"; A "1000"])
(* ---------------------------------------------------------------------------- *)
(* A command for copying a file. *)
let copy_file_from_tag src dst env build =
Cmd (S [A "cp"; T (tags_of_pathname src); P dst])
(* ---------------------------------------------------------------------------- *)
(* Dealing with the two parsers. *)
(* Just for fun, Menhir comes with two parsers for its own input files. One is
called [yacc-parser.mly] and is built using [ocamlyacc]. The other is called
[fancy-parser.mly] and is built using Menhir. It depends on [standard.mly].
The choice between the two parsers is determined by the presence of the tag
[yacc_parser] or [fancy_parser]. *)
let parser_rule () =
(* The three dependencies. *)
flag_and_dep ["origin_parser"; "yacc_parser"] (P "yacc-parser.mly");
flag_and_dep ["origin_parser"; "fancy_parser"] (P "fancy-parser.mly");
dep ["origin_parser"; "fancy_parser"] ["standard.mly"];
(* The two rules. *)
rule "yacc-parser -> parser" ~prod:"parser.mly" (copy_file_from_tag "yacc-parser.mly" "parser.mly");
rule "fancy-parser -> parser" ~prod:"parser.mly" (copy_file_from_tag "fancy-parser.mly" "parser.mly")
(* ---------------------------------------------------------------------------- *)
(* Define custom compilation rules. *)
let () =
dispatch (function After_rules ->
(* Add our rules after the standard ones. *)
parser_rule();
flags();
| _ -> ()
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment