forked from lix-project/lix
* 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
|
@ -17,6 +17,6 @@ parse-table.h: nix.tbl
|
||||||
../bin2c/bin2c nixParseTable < $< > $@ || (rm $@ && exit 1)
|
../bin2c/bin2c nixParseTable < $< > $@ || (rm $@ && exit 1)
|
||||||
|
|
||||||
%.tbl: %.sdf
|
%.tbl: %.sdf
|
||||||
../../externals/inst/bin/sdf2table -i $< -o $@
|
../../externals/inst/bin/sdf2table -s -i $< -o $@
|
||||||
|
|
||||||
CLEANFILES = parse-table.h nix.tbl
|
CLEANFILES = parse-table.h nix.tbl
|
||||||
|
|
|
@ -17,7 +17,7 @@ imports Fix-Exprs Fix-Layout
|
||||||
module Fix-Exprs
|
module Fix-Exprs
|
||||||
imports Fix-Lexicals URI
|
imports Fix-Lexicals URI
|
||||||
exports
|
exports
|
||||||
sorts Expr Bind Formal
|
sorts Expr Formal Bind Binds BindSemi ExprList
|
||||||
context-free syntax
|
context-free syntax
|
||||||
|
|
||||||
Id -> Expr {cons("Var")}
|
Id -> Expr {cons("Var")}
|
||||||
|
@ -34,11 +34,11 @@ exports
|
||||||
|
|
||||||
Expr Expr -> Expr {cons("Call"), left}
|
Expr Expr -> Expr {cons("Call"), left}
|
||||||
|
|
||||||
"{" {Formal ","}* "}" ":" Expr -> Expr {cons("Function"), right}
|
"{" {Formal ","}* "}" ":" Expr -> Expr {cons("Function")}
|
||||||
Id -> Formal {cons("NoDefFormal")}
|
Id -> Formal {cons("NoDefFormal")}
|
||||||
Id "?" Expr -> Formal {cons("DefFormal")}
|
Id "?" Expr -> Formal {cons("DefFormal")}
|
||||||
|
|
||||||
"assert" Expr ";" Expr -> Expr {cons("Assert"), right}
|
"assert" Expr ";" Expr -> Expr {cons("Assert")}
|
||||||
|
|
||||||
"rec" "{" Binds "}" -> Expr {cons("Rec")}
|
"rec" "{" Binds "}" -> Expr {cons("Rec")}
|
||||||
"let" "{" Binds "}" -> Expr {cons("LetRec")}
|
"let" "{" Binds "}" -> Expr {cons("LetRec")}
|
||||||
|
@ -87,7 +87,7 @@ exports
|
||||||
|
|
||||||
module Fix-Lexicals
|
module Fix-Lexicals
|
||||||
exports
|
exports
|
||||||
sorts Id Path
|
sorts Id Int Str Path PathComp Bool
|
||||||
lexical syntax
|
lexical syntax
|
||||||
[a-zA-Z\_][a-zA-Z0-9\_\']* -> Id
|
[a-zA-Z\_][a-zA-Z0-9\_\']* -> Id
|
||||||
"rec" -> Id {reject}
|
"rec" -> Id {reject}
|
||||||
|
@ -120,12 +120,17 @@ exports
|
||||||
|
|
||||||
module URI
|
module URI
|
||||||
exports
|
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
|
lexical syntax
|
||||||
Uscheme ":" (Uhierpath | Uopaquepath) -> Uri
|
Uscheme ":" (Uhierpart | Uopaquepart) -> Uri
|
||||||
|
|
||||||
(Unetpath | Uabspath) ("?" Uquery)? -> Uhierpath
|
(Unetpath | Uabspath) ("?" Uquery)? -> Uhierpart
|
||||||
Uuricnoslash Uuric* -> Uopaquepath
|
Uuricnoslash Uuric* -> Uopaquepart
|
||||||
|
|
||||||
Uunreserved | Uescaped | [\;\?\:\@\&\=\+\$\,] -> Uuricnoslash
|
Uunreserved | Uescaped | [\;\?\:\@\&\=\+\$\,] -> Uuricnoslash
|
||||||
|
|
||||||
|
@ -187,17 +192,18 @@ exports
|
||||||
|
|
||||||
module Fix-Layout
|
module Fix-Layout
|
||||||
exports
|
exports
|
||||||
|
sorts HashComment Asterisk Comment EOF
|
||||||
lexical syntax
|
lexical syntax
|
||||||
[\ \t\n] -> LAYOUT
|
[\ \t\n] -> LAYOUT
|
||||||
HashComment -> LAYOUT
|
HashComment -> LAYOUT
|
||||||
Comment -> LAYOUT
|
Comment -> LAYOUT
|
||||||
"#" ~[\n]* [\n] -> HashComment
|
"#" ~[\n]* ([\n] | EOF) -> HashComment
|
||||||
"//" ~[\n]* [\n] -> HashComment
|
"//" ~[\n]* ([\n] | EOF) -> HashComment
|
||||||
"/*" ( ~[\*] | Asterisk )* "*/" -> Comment
|
"/*" ( ~[\*] | Asterisk )* "*/" -> Comment
|
||||||
[\*] -> Asterisk
|
[\*] -> Asterisk
|
||||||
|
"" -> EOF
|
||||||
lexical restrictions
|
lexical restrictions
|
||||||
Asterisk -/- [\/]
|
Asterisk -/- [\/]
|
||||||
|
EOF -/- ~[]
|
||||||
context-free restrictions
|
context-free restrictions
|
||||||
LAYOUT? -/- [\ \t\n] | [\#]
|
LAYOUT? -/- [\ \t\n] | [\#]
|
||||||
syntax
|
|
||||||
HashComment <START> -> <START>
|
|
||||||
|
|
|
@ -154,7 +154,7 @@ Expr parseExprFromFile(Path path)
|
||||||
if (!imploded)
|
if (!imploded)
|
||||||
throw Error(format("cannot implode parse tree"));
|
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);
|
% path % imploded);
|
||||||
|
|
||||||
/* Finally, clean it up. */
|
/* Finally, clean it up. */
|
||||||
|
|
Loading…
Reference in a new issue