aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/spp/rpp/rpprat/lex.r
diff options
context:
space:
mode:
Diffstat (limited to 'unix/boot/spp/rpp/rpprat/lex.r')
-rw-r--r--unix/boot/spp/rpp/rpprat/lex.r49
1 files changed, 49 insertions, 0 deletions
diff --git a/unix/boot/spp/rpp/rpprat/lex.r b/unix/boot/spp/rpp/rpprat/lex.r
new file mode 100644
index 00000000..bc8f7a27
--- /dev/null
+++ b/unix/boot/spp/rpp/rpprat/lex.r
@@ -0,0 +1,49 @@
+#-h- lex 543 local 12/01/80 15:54:12
+# lex - return lexical type of token
+ include defs
+
+ integer function lex (lexstr)
+ character lexstr (MAXTOK)
+
+ include COMMON_BLOCKS
+
+ character gnbtok, t, c
+
+ integer lookup, n
+ string sdefault "default"
+
+ for (lex = gnbtok (lexstr, MAXTOK); lex == NEWLINE;
+ lex = gnbtok (lexstr, MAXTOK))
+ ;
+
+ if (lex == EOF | lex == SEMICOL | lex == LBRACE | lex == RBRACE)
+ return
+ if (lex == DIGIT)
+ lex = LEXDIGITS
+ else if (lex == TOGGLE)
+ lex = LEXLITERAL
+ else if (lex == XPP_DIRECTIVE)
+ lex = LEXDECL
+ else if (lookup (lexstr, lex, rkwtbl) == YES) {
+ if (lex == LEXDEFAULT) { # "default:"
+ n = -1
+ repeat {
+ c = ngetch (c)
+ n = n + 1
+ } until (c != BLANK & c != TAB)
+ call putbak (c)
+
+ t = gnbtok (lexstr, MAXTOK)
+ call pbstr (lexstr)
+ if (n > 0)
+ call putbak (BLANK)
+ call scopy (sdefault, 1, lexstr, 1)
+ if (t != COLON)
+ lex = LEXOTHER
+ }
+ }
+ else
+ lex = LEXOTHER
+
+ return
+ end