% -*- mode: Noweb; noweb-code-mode: icon-mode -*- \section{Finding definitions in $\lambda$-RTL} <<*>>= procedure main(args) go() end <<*>>= procedure postpass(name, arg) static kind, definers initial { kind := "bogus" definers := ["fun", "val", "structure", "signature", "type", "rtlop"] } case name of { "begin" : arg ? kind := tab(upto(' ')|0) "text" : if kind == "code" then arg ? if =(""|" "|" ") & =!definers & tab(many(' ')) then { skiptyvars(); optwhite() if ="[" then while define_id() else define_id() } } return end procedure define_id() static id1, id2, reserved initial { id1 := &letters ++ &digits ++ '\'_' id2 := '!%&$+-/:<=>?@\\~^|#*`' reserved := set() every insert(reserved, !"*|:=#_" | "->" | "=>") } optwhite() if id := tab(many(id1 | id2)) then { member(reserved, id) | writedefn(id) return id } fail end procedure prepass(name, arg) if name == "end" then writedefn(&null) # force newline end procedure skiptyvars() suspend =("'"|"#") || tab(many(&letters ++ &digits ++ '\'_')) | ="(" || bal(')', '(', ')') || =")" end procedure optwhite() suspend tab(many(' \t')) | "" end <<*>>= procedure rcsinfo () return "$Id: lrtldefs.nw,v 1.17 2008/10/06 01:03:05 nr Exp nr $" || "$Name: v2_12 $" end @