1 4 package gnu.kawa.lispexpr; 5 import gnu.mapping.*; 6 import gnu.text.*; 7 8 9 10 public class ReaderMacro extends ReaderMisc 11 { 12 Procedure procedure; 13 14 public ReaderMacro(Procedure procedure, boolean nonTerminating) 15 { 16 super(nonTerminating ? ReadTable.NON_TERMINATING_MACRO 17 : ReadTable.TERMINATING_MACRO); 18 this.procedure = procedure; 19 } 20 21 public ReaderMacro(Procedure procedure) 22 { 23 super(ReadTable.TERMINATING_MACRO); 24 this.procedure = procedure; 25 } 26 27 public boolean isNonTerminating() 28 { 29 return kind == ReadTable.NON_TERMINATING_MACRO; 30 } 31 32 public Procedure getProcedure() 33 { 34 return procedure; 35 } 36 37 public Object read (Lexer in, int ch, int count) 38 throws java.io.IOException , SyntaxException 39 { 40 java.io.Reader reader = in.getPort(); 42 try 43 { 44 return procedure.apply2(reader, Char.make(ch)); 45 } 46 catch (java.io.IOException ex) 47 { 48 throw ex; 49 } 50 catch (gnu.text.SyntaxException ex) 51 { 52 throw ex; 53 } 54 catch (Throwable ex) 55 { 56 in.fatal("reader macro '"+procedure+"' threw: "+ex); 57 return null; } 59 } 60 } 61 | Popular Tags |