This is an automated email from the git hooks/post-receive script. treinen pushed a commit to branch master in repository menhir.
commit 3163380ef3659f70bf8bf3554e78bb60f5ebee5e Author: Ralf Treinen <trei...@free.fr> Date: Mon Jun 19 22:12:43 2017 +0200 as-installed package test --- debian/changelog | 3 ++- debian/tests/calc/.merlin | 1 + debian/tests/calc/README | 9 +++++++++ debian/tests/calc/calc.ml | 28 ++++++++++++++++++++++++++ debian/tests/calc/lexer.mll | 48 ++++++++++++++++++++++++++++++++++++++++++++ debian/tests/calc/parser.mly | 33 ++++++++++++++++++++++++++++++ debian/tests/calcdemo | 18 +++++++++++++++++ debian/tests/control | 2 ++ 8 files changed, 141 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index cc1aa70..48dc820 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,8 +7,9 @@ menhir (20170607.dfsg-1) unstable; urgency=medium - simplify (drop useless CURDIR) - generate tarball with version "+dfsg" instead of ".dfsg" * Add myself as uploader + * Add as-installed package test - -- Ralf Treinen <trei...@debian.org> Mon, 19 Jun 2017 21:37:55 +0200 + -- Ralf Treinen <trei...@debian.org> Mon, 19 Jun 2017 22:11:44 +0200 menhir (20160808+dfsg-1) unstable; urgency=medium diff --git a/debian/tests/calc/.merlin b/debian/tests/calc/.merlin new file mode 100644 index 0000000..1a1fd25 --- /dev/null +++ b/debian/tests/calc/.merlin @@ -0,0 +1 @@ +B _build diff --git a/debian/tests/calc/README b/debian/tests/calc/README new file mode 100644 index 0000000..f6f0223 --- /dev/null +++ b/debian/tests/calc/README @@ -0,0 +1,9 @@ +This example is the 'calc' demo from the upstream distribution. + +This tiny program reads arithmetic expressions from the standard input +channel. Each expression is expected to be complete when the current line +ends. Its value is then displayed on the standard output channel. This +code is adapted from ocamlyacc's documentation. + +We compile the parser using Menhir's code back-end. For an example of using +Menhir's table back-end, see the calc-incremental/ and calc-inspection/. diff --git a/debian/tests/calc/calc.ml b/debian/tests/calc/calc.ml new file mode 100644 index 0000000..d5de4c8 --- /dev/null +++ b/debian/tests/calc/calc.ml @@ -0,0 +1,28 @@ +let process (line : string) = + let linebuf = Lexing.from_string line in + try + (* Run the parser on this line of input. *) + Printf.printf "%d\n%!" (Parser.main Lexer.token linebuf) + with + | Lexer.Error msg -> + Printf.fprintf stderr "%s%!" msg + | Parser.Error -> + Printf.fprintf stderr "At offset %d: syntax error.\n%!" (Lexing.lexeme_start linebuf) + +let process (optional_line : string option) = + match optional_line with + | None -> + () + | Some line -> + process line + +let rec repeat channel = + (* Attempt to read one line. *) + let optional_line, continue = Lexer.line channel in + process optional_line; + if continue then + repeat channel + +let () = + repeat (Lexing.from_channel stdin) + diff --git a/debian/tests/calc/lexer.mll b/debian/tests/calc/lexer.mll new file mode 100644 index 0000000..437eb0c --- /dev/null +++ b/debian/tests/calc/lexer.mll @@ -0,0 +1,48 @@ +{ + open Parser + + exception Error of string + +} + +(* This rule looks for a single line, terminated with '\n' or eof. + It returns a pair of an optional string (the line that was found) + and a Boolean flag (false if eof was reached). *) + +rule line = parse +| ([^'\n']* '\n') as line + (* Normal case: one line, no eof. *) + { Some line, true } +| eof + (* Normal case: no data, eof. *) + { None, false } +| ([^'\n']+ as line) eof + (* Special case: some data but missing '\n', then eof. + Consider this as the last line, and add the missing '\n'. *) + { Some (line ^ "\n"), false } + +(* This rule analyzes a single line and turns it into a stream of + tokens. *) + +and token = parse +| [' ' '\t'] + { token lexbuf } +| '\n' + { EOL } +| ['0'-'9']+ as i + { INT (int_of_string i) } +| '+' + { PLUS } +| '-' + { MINUS } +| '*' + { TIMES } +| '/' + { DIV } +| '(' + { LPAREN } +| ')' + { RPAREN } +| _ + { raise (Error (Printf.sprintf "At offset %d: unexpected character.\n" (Lexing.lexeme_start lexbuf))) } + diff --git a/debian/tests/calc/parser.mly b/debian/tests/calc/parser.mly new file mode 100644 index 0000000..eeb104f --- /dev/null +++ b/debian/tests/calc/parser.mly @@ -0,0 +1,33 @@ +%token <int> INT +%token PLUS MINUS TIMES DIV +%token LPAREN RPAREN +%token EOL + +%left PLUS MINUS /* lowest precedence */ +%left TIMES DIV /* medium precedence */ +%nonassoc UMINUS /* highest precedence */ + +%start <int> main + +%% + +main: +| e = expr EOL + { e } + +expr: +| i = INT + { i } +| LPAREN e = expr RPAREN + { e } +| e1 = expr PLUS e2 = expr + { e1 + e2 } +| e1 = expr MINUS e2 = expr + { e1 - e2 } +| e1 = expr TIMES e2 = expr + { e1 * e2 } +| e1 = expr DIV e2 = expr + { e1 / e2 } +| MINUS e = expr %prec UMINUS + { - e } + diff --git a/debian/tests/calcdemo b/debian/tests/calcdemo new file mode 100755 index 0000000..8a3d38c --- /dev/null +++ b/debian/tests/calcdemo @@ -0,0 +1,18 @@ +#!/bin/sh -e + +this=calc +indir=debian/tests +outdir=${ADT_ARTIFACTS:-/tmp}/${this} +mkdir -p ${outdir} + +cp ${indir}/${this}/* ${outdir} +cd ${outdir} +ocamlbuild -quiet -use-ocamlfind -use-menhir -menhir "menhir --infer" \ + calc.byte +[ $(echo "(1 + 2 * 10) * 2" | ./calc.byte) -eq '42' ] + +if [ -x /usr/bin/ocamlopt ] +then ocamlbuild -quiet -use-ocamlfind -use-menhir -menhir "menhir --infer" \ + calc.native +[ $(echo "(1 + 2 * 10) * 2" | ./calc.native) -eq '42' ] +fi diff --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 0000000..81227bc --- /dev/null +++ b/debian/tests/control @@ -0,0 +1,2 @@ +Tests: calcdemo +Depends: ocaml-nox, libfindlib-ocaml -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/menhir.git _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits