home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / java / tools / jsc / activefunction.java next >
Text File  |  1995-08-11  |  3KB  |  110 lines

  1. /*
  2.  * @(#)ActiveFunction.java    1.1 95/05/10
  3.  * 
  4.  * Copyright (c) 1995 Sun Microsystems, Inc.  All Rights reserved Permission to
  5.  * use, copy, modify, and distribute this software and its documentation for
  6.  * NON-COMMERCIAL purposes and without fee is hereby granted provided that
  7.  * this copyright notice appears in all copies. Please refer to the file
  8.  * copyright.html for further important copyright and licensing information.
  9.  * 
  10.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  11.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  12.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
  13.  * OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
  14.  * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
  15.  * ITS DERIVATIVES.
  16.  */
  17.  
  18. package java.tools.jsc;
  19. import java.io.StreamTokenizer;
  20.  
  21. /**
  22.  * A class to implement one command in a script.
  23.  * @author  James Gosling
  24.  */
  25.  
  26. class ActiveFunction {
  27.     Object args[];
  28.     String command;
  29.     ActiveFunction next;
  30.     static final String immediate_cmd = "[";
  31.     static final String later_cmd = "(";
  32.     ScriptCommand resolution;
  33.     private Object parsearg(StreamTokenizer st) {
  34.     Object ret;
  35.     switch (st.nextToken()) {
  36.       case ']':
  37.       case ')':
  38.       case '}':
  39.         st.pushBack();
  40.       case ';':
  41.       case StreamTokenizer.TT_EOF:
  42.       case '\n':
  43.         return null;
  44.       case '{':
  45.         return parsecmds(st, '}');
  46.       case '[':
  47.         return parsecmds(st, ']');
  48.       case '(':
  49.         return parsecmds(st, ')');
  50.       case StreamTokenizer.TT_WORD:{
  51.         char c = st.sval.charAt(0);
  52.         if ('0' <= c && c <= '9' || c == '.' || c == '-') {
  53.             try {
  54.             return Double.valueOf(st.sval);
  55.             } catch(Exception e) {
  56.             }
  57.         }
  58.         }
  59.       default:
  60.         if (st.sval == null)
  61.         throw new MalformedScriptException("Argument expected");
  62.         return st.sval;
  63.     }
  64.     }
  65.     private void parseargs(StreamTokenizer st, int slot) {
  66.     Object arg = parsearg(st);
  67.     if (arg != null) {
  68.         parseargs(st, slot + 1);
  69.         args[slot] = arg;
  70.     } else if (slot > 0)
  71.         args = new Object[slot];
  72.     }
  73.     ActiveFunction (StreamTokenizer st, String firstword) {
  74.     command = firstword.toLowerCase();
  75.     parseargs(st, 0);
  76.     }
  77.     private ActiveFunction parsecmds(StreamTokenizer st, int term) {
  78.     ActiveFunction cmd = ScriptContext.parse(st);
  79.     if (cmd != null)
  80.         cmd.next = parsecmds(st, term);
  81.     if (term != 0 && term != st.ttype)
  82.         throw new MalformedScriptException(term+" expected");
  83.     return cmd;
  84.     }
  85.     private String thisString() {
  86.     String ret = null;
  87.     if (command == immediate_cmd) {
  88.         for (int i = 0; i < args.length; i++)
  89.         ret = (ret == null ? "[" : ret + "; ") + args[i];
  90.         ret = ret = ret + "]";
  91.     } else if (command == later_cmd) {
  92.         for (int i = 0; i < args.length; i++)
  93.         ret = (ret == null ? "{" : ret + ";\n\t") + args[i];
  94.         ret = ret = ret + "}";
  95.     } else {
  96.         ret = command;
  97.         if (args != null)
  98.         for (int i = 0; i < args.length; i++)
  99.             ret = ret + " " + args[i];
  100.     }
  101.     return ret;
  102.     }
  103.     public String toString() {
  104.     String s = thisString();
  105.     for (ActiveFunction p = next; p != null; p = p.next)
  106.         s = s + "; " + p.thisString();
  107.     return "(" + s + ")";
  108.     }
  109. }
  110.