DSL 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 gives you line/column position for the syntax that couldn't be parsed. The cause may be clear from that information, or perhaps not. 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
/for
blocks, even when the body is a single statement.
As for transparency:
-
As in any language, you can do
print
, oreprint
to print to stderr. See Print statements; see also Dump statements and Emit statements. -
The
-v
option tomlr put
andmlr filter
prints 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. -
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.dat
with a minimum of punctuational bric-a-brac -- but for programs over a few lines long, I generally find that the more type-specification, the better.