home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / dev / e / amigae / src / tools / lex / simplelextest.e < prev    next >
Text File  |  1992-09-02  |  1KB  |  74 lines

  1. -> lex test, parses lists with ints from a file.
  2.  
  3. MODULE 'tools/simplelex', 'tools/file', 'tools/lisp'
  4.  
  5. DEF t,at    -> current token and attribute
  6.  
  7. PROC main() HANDLE
  8.   DEF m=NIL,l,a
  9.   m,l:=readfile('testinput.lists')
  10.   lex_init(m,l,TRUE,"#")
  11.   t,at:=lex()
  12.   WHILE (a:=parse())<>-1
  13.     showcellint(a)
  14.     WriteF('\n')
  15.   ENDWHILE
  16. EXCEPT DO
  17.   IF m THEN freefile(m)
  18.   SELECT exception
  19.     CASE "OPEN"; WriteF('no file!\n')
  20.     CASE "MEM";  WriteF('no mem!\n')
  21.     CASE "perr"; printerr(exceptioninfo)
  22.   ENDSELECT
  23. ENDPROC
  24.  
  25. PROC parse()
  26.   DEF a
  27.   IF t="<"
  28.     t,at:=lex()
  29.     IF t=">"
  30.       t,at:=lex()
  31.       RETURN NIL
  32.     ELSE
  33.       a:=parse()
  34.       RETURN <a|parsecdr()>
  35.     ENDIF
  36.   ELSEIF t=LEX_INTEGER
  37.     a:=at
  38.     t,at:=lex()
  39.     RETURN a
  40.   ELSEIF t=LEX_EOF
  41.     RETURN -1
  42.   ELSE
  43.     Throw("perr",'"<" or integer expected')
  44.   ENDIF
  45. ENDPROC
  46.  
  47. PROC parsecdr()
  48.   DEF a
  49.   IF t=","
  50.     t,at:=lex()
  51.     a:=parse()
  52.     RETURN <a|parsecdr()>
  53.   ELSEIF t="|"
  54.     t,at:=lex()
  55.     a:=parse()
  56.     IF t<>">" THEN Throw("perr",'">" expected')
  57.     t,at:=lex()
  58.     RETURN a
  59.   ELSEIF t=">"
  60.     t,at:=lex()
  61.     RETURN NIL
  62.   ELSE
  63.     Throw("perr",'"," or "|" or ">" expected')
  64.   ENDIF
  65. ENDPROC
  66.  
  67. PROC printerr(s)
  68.   DEF ers[200]:STRING,pos,a
  69.   pos:=lex_getline(ers)-1
  70.   WriteF('\nERROR: \s\nLINE: \d\n\s\n',s,lex_curline(),ers)
  71.   IF pos>0 THEN FOR a:=1 TO pos DO WriteF(' ')
  72.   WriteF('^\n')
  73. ENDPROC
  74.