./md2c indent_test.mdc
itest: itest.c
- tests:: itest itest.code
+ doitest: itest itest.code
./itest itest.code
+ checkitest: itest itest.code
+ @grep -v '^#' itest.out > .tmp.out
+ @./itest itest.code | diff -u - .tmp.out || echo itest FAILED
+ demos :: doitest
+ tests :: checkitest
# indent: header
exit(0);
}
-
# indent: grammar
~~~~~~
| NEWLINE }
Block -> Open Statementlist Close ${ $0 = $<2; }$
| Open SimpleStatements } ${ $0 = $<2; }$
- | : Statementlist ${ $0 = $2; $2 = NULL; }$
+ | : Statementlist ${ $0 = $<2; }$
SimpleStatements -> SimpleStatements ; SimpleStatement ${
{
| IfStatement ${ $0 = $<1; }$
| Statement NEWLINE ${ $0 = $<1; }$
- IfStatement -> if Expression Block OptNL ${
+ $RIGHT else
+
+ IfStatement -> if Expression Block OptNL $$else ${
$0 = calloc(1, sizeof(struct statement));
$0->expr = $<2;
$0->thenpart = $<3;
}$
- | if Expression : SimpleStatements ${
+ | if Expression : SimpleStatements $$else ${
$0 = calloc(1, sizeof(struct statement));
$0->expr = $<2;
$0->thenpart = $<4;
$0->left = $<1;
$0->right = $<3;
}$
- | Term ${ $0 = $1; $1 = NULL; }$
+ | Term ${ $0 = $<1; }$
Term -> Term * Factor ${
$0 = calloc(1, sizeof(struct expression));
$0->op = $2.txt;
$0->left = $<1;
$0->right = $<3;
}$
- | Factor ${ $0 = $1; $1 = NULL; }$
+ | Factor ${ $0 = $<1; }$
Factor -> IDENTIFIER ${
$0 = calloc(1, sizeof(struct expression));
$0->op = $1.txt;
c= d
x = y
+# File: itest.out
+ (hello=yes);
+ (mister=no);
+ (there=x);
+ (all=y);
+ if (cond+cond2):
+ (hello=x);
+ (hello2=x);
+ (sum=(val+val));
+ if condX:
+ (foo=((x*x)+(y/two)));
+ else:
+ if cond2:
+ (there1=x);
+ (there1a=x);
+ (there2=x);
+ (there3=x);
+ (all=y);
+ if true:
+ (yes=x);
+ else:
+ (no=x);
+ if true:
+ (yes=no);
+ (no=yes);
+ if false:
+ (print=OK);
+ else:
+ (print=not_OK);
+ if a:
+ if b:
+ (c=d);
+ (x=y);