User guide
218 CHAPTER 13. EXAMPLE PROGRAMS
AND lex() BE SWITCHON ch INTO
{ DEFAULT: writef("Bad ch in lex: %c*n", ch)
CASE Eof: token := Eof
RETURN
CASE ’ ’:
CASE ’*n’ :rch(); lex(); RETURN
CASE ’a’:CASE ’b’:CASE ’c’:CASE ’d’:CASE ’e’:
CASE ’f’:CASE ’g’:CASE ’h’:CASE ’i’:CASE ’j’:
CASE ’k’:CASE ’l’:CASE ’m’:CASE ’n’:CASE ’o’:
CASE ’p’:CASE ’q’:CASE ’r’:CASE ’s’:CASE ’t’:
CASE ’u’:CASE ’v’:CASE ’w’:CASE ’x’:CASE ’y’:
CASE ’z’:
token := Id; lexval := ch; rch(); RETURN
CASE ’0’:CASE ’1’:CASE ’2’:CASE ’3’:CASE ’4’:
CASE ’5’:CASE ’6’:CASE ’7’:CASE ’8’:CASE ’9’:
token, lexval := Num, 0
WHILE ’0’<=ch<=’9’ DO
{ lexval := 10*lexval + ch - ’0’
rch()
}
RETURN
CASE ’-’: rch()
IF ch=’>’ DO { token := Cond; rch(); RETURN }
token := Sub
RETURN
CASE ’+’: token := Add; rch(); RETURN
CASE ’(’: token := Lparen; rch(); RETURN
CASE ’)’: token := Rparen; rch(); RETURN
CASE ’**’: token := Mul; rch(); RETURN
CASE ’/’: token := Div; rch(); RETURN
CASE ’L’: token := Lam; rch(); RETURN
CASE ’Y’: token := Y; rch(); RETURN
CASE ’=’: token := Eq; rch(); RETURN
CASE ’,’: token := Comma; rch(); RETURN
}