示例#1
0
文件: Main.java 项目: TomGebhardt/k
  public static Term makeConfiguration(
      Term kast, String stdin, RunProcess rp, boolean hasTerm, Context context)
      throws TransformerException, IOException {

    if (hasTerm) {
      if (kast == null) {
        return rp.runParserOrDie(K.getProgramParser(), K.term, false, null, context);
      } else {
        Error.report("You cannot specify both the term and the configuration\nvariables.");
      }
    }

    HashMap<String, Term> output = new HashMap<String, Term>();
    boolean hasPGM = false;
    Enumeration<Object> en = K.configuration_variables.keys();
    while (en.hasMoreElements()) {
      String name = (String) en.nextElement();
      String value = K.configuration_variables.getProperty(name);
      String parser = K.cfg_parsers.getProperty(name);
      // TODO: get sort from configuration term in definition and pass it
      // here
      Term parsed = null;
      if (parser == null) {
        parser = "kast -groundParser -e";
      }
      parsed = rp.runParserOrDie(parser, value, false, null, context);
      output.put("$" + name, parsed);
      hasPGM = hasPGM || name.equals("$PGM");
    }
    if (!hasPGM && kast != null) {
      output.put("$PGM", kast);
    }
    if (!K.io && stdin == null) {
      stdin = "";
    }
    if (stdin != null) {
      KApp noIO = KApp.of(KLabelConstant.of("'#noIO", context));
      if (K.backend.equals("java")) {
        DataStructureSort myList =
            context.dataStructureListSortOf(DataStructureSort.DEFAULT_LIST_SORT);
        if (myList != null) {
          output.put("$noIO", DataStructureBuiltin.element(myList, noIO));
        }
      } else {
        output.put("$noIO", new ListItem(noIO));
      }
      output.put("$stdin", StringBuiltin.kAppOf(stdin + "\n"));
    } else {
      if (K.backend.equals("java")) {
        DataStructureSort myList =
            context.dataStructureListSortOf(DataStructureSort.DEFAULT_LIST_SORT);
        if (myList != null) {
          output.put("$noIO", DataStructureBuiltin.empty(myList));
        }
      } else {
        output.put("$noIO", org.kframework.kil.List.EMPTY);
      }
      output.put("$stdin", StringBuiltin.EMPTY);
    }

    if (GlobalSettings.verbose) sw.printIntermediate("Make configuration");

    return plug(output, context);
  }