From 2be8b5917a8040fac72e7970e94bbb436e8c35d6 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 19 Nov 2003 10:04:03 +0000 Subject: [PATCH] * Use `sdftable -s' to get warnings about the grammar. * Several bug fixes in the grammar. * Allow one-line comments (#... and //...) to end in EOF. --- src/nix-instantiate/Makefile.am | 2 +- src/nix-instantiate/nix.sdf | 30 ++++++++++++++++++------------ src/nix-instantiate/parser.cc | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/nix-instantiate/Makefile.am b/src/nix-instantiate/Makefile.am index 3a09add0c..6fe798501 100644 --- a/src/nix-instantiate/Makefile.am +++ b/src/nix-instantiate/Makefile.am @@ -17,6 +17,6 @@ parse-table.h: nix.tbl ../bin2c/bin2c nixParseTable < $< > $@ || (rm $@ && exit 1) %.tbl: %.sdf - ../../externals/inst/bin/sdf2table -i $< -o $@ + ../../externals/inst/bin/sdf2table -s -i $< -o $@ CLEANFILES = parse-table.h nix.tbl diff --git a/src/nix-instantiate/nix.sdf b/src/nix-instantiate/nix.sdf index 54f5d5266..615bdb974 100644 --- a/src/nix-instantiate/nix.sdf +++ b/src/nix-instantiate/nix.sdf @@ -17,7 +17,7 @@ imports Fix-Exprs Fix-Layout module Fix-Exprs imports Fix-Lexicals URI exports - sorts Expr Bind Formal + sorts Expr Formal Bind Binds BindSemi ExprList context-free syntax Id -> Expr {cons("Var")} @@ -34,11 +34,11 @@ exports Expr Expr -> Expr {cons("Call"), left} - "{" {Formal ","}* "}" ":" Expr -> Expr {cons("Function"), right} + "{" {Formal ","}* "}" ":" Expr -> Expr {cons("Function")} Id -> Formal {cons("NoDefFormal")} Id "?" Expr -> Formal {cons("DefFormal")} - "assert" Expr ";" Expr -> Expr {cons("Assert"), right} + "assert" Expr ";" Expr -> Expr {cons("Assert")} "rec" "{" Binds "}" -> Expr {cons("Rec")} "let" "{" Binds "}" -> Expr {cons("LetRec")} @@ -87,7 +87,7 @@ exports module Fix-Lexicals exports - sorts Id Path + sorts Id Int Str Path PathComp Bool lexical syntax [a-zA-Z\_][a-zA-Z0-9\_\']* -> Id "rec" -> Id {reject} @@ -120,12 +120,17 @@ exports module URI exports - sorts Uri + sorts Uri Uhierpart Uopaquepart Uuricnoslash Unetpath Uabspath + Urelpath Urelsegment Uscheme Uauthority Uregname Userver + Uuserinfo Uhostport Uhost Uhostname Udomainlabel Utoplabel + UIPv4address Uport Upath Upathsegments Usegment Uparam + Upchar Uquery Ufragment Uuric Ureserved Uunreserved Umark + Uescaped Uhex Ualphanum Ualpha Ulowalpha Uupalpha Udigit lexical syntax - Uscheme ":" (Uhierpath | Uopaquepath) -> Uri + Uscheme ":" (Uhierpart | Uopaquepart) -> Uri - (Unetpath | Uabspath) ("?" Uquery)? -> Uhierpath - Uuricnoslash Uuric* -> Uopaquepath + (Unetpath | Uabspath) ("?" Uquery)? -> Uhierpart + Uuricnoslash Uuric* -> Uopaquepart Uunreserved | Uescaped | [\;\?\:\@\&\=\+\$\,] -> Uuricnoslash @@ -187,17 +192,18 @@ exports module Fix-Layout exports + sorts HashComment Asterisk Comment EOF lexical syntax [\ \t\n] -> LAYOUT HashComment -> LAYOUT Comment -> LAYOUT - "#" ~[\n]* [\n] -> HashComment - "//" ~[\n]* [\n] -> HashComment + "#" ~[\n]* ([\n] | EOF) -> HashComment + "//" ~[\n]* ([\n] | EOF) -> HashComment "/*" ( ~[\*] | Asterisk )* "*/" -> Comment [\*] -> Asterisk + "" -> EOF lexical restrictions Asterisk -/- [\/] + EOF -/- ~[] context-free restrictions LAYOUT? -/- [\ \t\n] | [\#] - syntax - HashComment -> diff --git a/src/nix-instantiate/parser.cc b/src/nix-instantiate/parser.cc index f950a51f6..b2c74af33 100644 --- a/src/nix-instantiate/parser.cc +++ b/src/nix-instantiate/parser.cc @@ -154,7 +154,7 @@ Expr parseExprFromFile(Path path) if (!imploded) throw Error(format("cannot implode parse tree")); - debug(format("imploded parse tree of `%1%': %2%") + printMsg(lvlVomit, format("imploded parse tree of `%1%': %2%") % path % imploded); /* Finally, clean it up. */