2.2 KiB
DSL reference: errors and transparency
As soon as you have a programming language, you start having the problem What is my code doing, and why? This includes getting syntax errors -- which are always annoying -- as well as the even more annoying problem of a program which parses without syntax error but doesn't do what you expect.
The syntax error message is cryptic: it says syntax error at followed by the next symbol it couldn't parse. This is good, but (as of 5.0.0) it doesn't say things like syntax error at line 17, character 22. Here are some common causes of syntax errors:
-
Don't forget
;at end of line, before another statement on the next line. -
Miller's DSL lacks the
++and--operators. -
Curly braces are required for the bodies of
if/while/forblocks, even when the body is a single statement.
As for transparency:
-
As in any language, you can do
print, oreprintto print to stderr. See Print statements; see also Dump statements and Emit statements. -
The
-voption tomlr putandmlr filterprints abstract syntax trees for your code. While not all details here will be of interest to everyone, certainly this makes questions such as operator precedence completely unambiguous. -
The
-Toption prints a trace of each statement executed. -
The
-tand-aoptions show low-level details for the parsing process and for stack-variable-index allocation, respectively. These will likely be of interest to people who enjoy compilers, and probably less useful for a more general audience. -
Please see type-checking for type declarations and type-assertions you can use to make sure expressions and the data flowing them are evaluating as you expect. I made them optional because one of Miller's important use-cases is being able to say simple things like
mlr put '$y = $x + 1' myfile.datwith a minimum of punctuational bric-a-brac -- but for programs over a few lines I generally find that the more type-specification, the better.