##### LM ##### namespace hash lex literal 'define', 'include' literal '\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 '\n'] | ['include' string '\n'] 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.tree print( Input.error '\n' ) else { #print( Input.tree '\n' ) S: lang::start = Input.tree for H: lang::statement in S { require H [ lang::'#' hash::hash ] print( '--' %H '==\n' ) } } ##### IN ##### hello; #include "input1" #include "input2" #include "input3" there; ##### EXP ##### --#include "input1" == -- #include "input2" == -- #include "input3" ==