mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-26 15:56:18 +02:00
* Use `sdftable -s' to get warnings about the grammar.
* Several bug fixes in the grammar. * Allow one-line comments (#... and //...) to end in EOF.
This commit is contained in:
parent
38946e1378
commit
2be8b5917a
3 changed files with 20 additions and 14 deletions
|
@ -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
|
||||
|
|
|
@ -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 <START> -> <START>
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue