示例#1
0
  protected String parseStatement(InputReader reader)
      throws InvalidSyntaxException, EnvironmentException, ParserException {
    if (!reader.hasNextWord()) {
      return reader.getCurrentStatement();
    }

    Word word = reader.nextWord();
    String keyword = word.asName();
    WordTail tail = reader.getWordTail();

    if (tail.isCompilerCommand()) {
      String command = reader.nextWord().asName();
      if (command.equals("include")) {
        return parseInclude(reader);
      } else if (command.equals("macro")) {
        insideMacro = true;
        return reader.getCurrentStatement();
      } else if (command.equals("macroend")) {
        insideMacro = false;
        return reader.getCurrentStatement();
      }
    }

    if (insideMacro) {
      return reader.getCurrentStatement();
    } else if (tail.isAssignment()) {
      return statementParser.parseVarAssign(word, reader);
    } else if (tail.isFunctionArgsOpen()) {
      return statementParser.parseCall(word, null, reader);
    } else if (keyword.equals("var")) {
      return statementParser.parseVarDeclare(reader);
    } else if (keyword.equals("function")) {
      return statementParser.parseFunctionBegin(reader);
    } else if (keyword.equals("return")) {
      return statementParser.parseFunctionReturn(reader);
    } else if (keyword.equals("functionend")) {
      return statementParser.parseFunctionEnd(reader);
    } else if (keyword.equals("if") || keyword.equals("elseif")) {
      return statementParser.parseIf(word, reader);
    } else if (keyword.equals("else")) {
      return NSISStatements.logicLibDefine(reader.getIndent(), "Else");
    } else if (keyword.equals("endif")) {
      return NSISStatements.logicLibDefine(reader.getIndent(), "EndIf");
    } else if (keyword.equals("do")) {
      return statementParser.parseDoLoop("Do", reader);
    } else if (keyword.equals("continue")) {
      return NSISStatements.logicLibDefine(reader.getIndent(), "Continue");
    } else if (keyword.equals("break")) {
      return NSISStatements.logicLibDefine(reader.getIndent(), "Break");
    } else if (keyword.equals("loop")) {
      return statementParser.parseDoLoop("Loop", reader);
    }

    return reader.getCurrentStatement();
  }