namespace hash lex literal `define `include token NL /'\n'/ -ni token id /[a-zA-Z_][a-zA-Z_0-9]*/ token number /[0-9]+/ token string /'"' ( [^"\\] | '\\' any )* '"'/ ignore /[ \t]+/ end def hash [`define id number NL] | [`include string NL] end # hash namespace lang lex ignore /space+/ literal `* `( `) `; `# token id /[a-zA-Z_][a-zA-Z_0-9]*/ token number /[0-9]+/ end def item [id] | [`( item* `)] def statement [item* `;] | [`# hash::hash] def start [statement*] end # lang parse Input: lang::start[ stdin ] if ! Input print[ error '\n' ] else { #print( Input.tree '\n' ) for H: lang::statement in Input { require H [ lang::`# hash::hash ] print[ '--' @H '==\n' ] } } ##### IN ##### hello; #include "input1" #include "input2" #include "input3" there; ##### EXP ##### --#include "input1" == -- #include "input2" == -- #include "input3" ==