The answer is simple: kind=165 is your new tape operator and its printing is missing in print_statement(). Your tape is no expression with a return value but a statement with side effects. Thus the MIL grammar in milprint.c expects the handling of your tape in print_statement() instead of print_expression() -- see also the grammar at the top of milprint.c (as the error message suggests :)). Jan On 04/17/2008 09:27 AM, Jan Flokstra wrote with possible deletions:
Hi Jan,
When I remove the if_() around my tj_docmgmt_tape() function in milgen.brg I get the following error message. [...]
Jan.
# End rule: "Rel: std_sort(Rel)" a0001 := a0006; a0004 := a0001.project (str(nil)); a0002 := a0007; a0003 := a0001.project (str(nil)); DocmgmTape (ws, a0004, a0002, a0003, a0001); fatal error: I encountered problems while generating MIL output. fatal error: This is possibly due to an illegal MIL tree, not conforming to the grammar in milprint.c fatal error: This is how far I was able to generate the script: notice: node: ALG_tj_docmgmt_tape fatal error: Illegal MIL tree. MIL printer screwed up (kind: 165). # halted in milprint.c (print_statement), line 596
-- Jan Rittinger Database Systems Technische Universität München (Germany) http://www-db.in.tum.de/~rittinge/