summaryrefslogtreecommitdiff
path: root/web/noweb/src/icon/lrtldefs.nw
diff options
context:
space:
mode:
Diffstat (limited to 'web/noweb/src/icon/lrtldefs.nw')
-rw-r--r--web/noweb/src/icon/lrtldefs.nw60
1 files changed, 60 insertions, 0 deletions
diff --git a/web/noweb/src/icon/lrtldefs.nw b/web/noweb/src/icon/lrtldefs.nw
new file mode 100644
index 0000000000..a928f761ff
--- /dev/null
+++ b/web/noweb/src/icon/lrtldefs.nw
@@ -0,0 +1,60 @@
+% -*- 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
+@