Exemple #1
0
  void
skipBinop(void)
{
	overByte();
	skipExpression();
	skipExpression();
}
Exemple #2
0
  addressType
evaluateMfor(void)
{
	expressionPCType	testPoint;
	expressionPCType	incrPoint;
	expressionPCType	endPoint;
	expressionPCType	bodyPoint;

	evaluateExpression();
	testPoint = pc;
	if (evaluateExpression()) {
		incrPoint = pc;
		skipExpression();
		bodyPoint = pc;
		do {
			pc = bodyPoint;
			evaluateExpression();
			endPoint = pc;
			pc = incrPoint;
			evaluateExpression();
			pc = testPoint;
		} while (evaluateExpression());
		pc = endPoint;
	} else {
		skipExpression();
		skipExpression();
	}
	return(0);
}
Exemple #3
0
  void
skipMif(void)
{
	skipExpression();
	skipExpression();
	skipExpression();
}
Exemple #4
0
  void
skipMfor(void)
{
	skipExpression();
	skipExpression();
	skipExpression();
	skipExpression();
}
Exemple #5
0
  addressType
evaluateMif(void)
{
	if (evaluateExpression()) {
		evaluateExpression();
		skipExpression();
	} else {
		skipExpression();
		evaluateExpression();
	}
	return(0);
}
Exemple #6
0
bool
ClParserParser::
skipDictionary()
{
  bool in_brackets = true;

  while (in_brackets) {
    bool assign;

    if (! skipExpression(&assign) && error_code_ != int(ClErr::INVALID_CHARACTER))
      return false;

    if      (parse_.isChar(','))
      parse_.skipChar();
    else if (parse_.isString("}}")) {
      parse_.skipChars(2);

      in_brackets = false;
    }
    else {
      error_code_ = int(ClErr::INVALID_CHARACTER);
      return false;
    }
  }

  return true;
}
Exemple #7
0
  void
skipBlock(void)
{
	while (*pc != END_TAG)
		skipExpression();
	overByte();
}
Exemple #8
0
bool
ClParserParser::
skipList()
{
  bool in_brackets = true;

  while (in_brackets) {
    bool assign;

    if (! skipExpression(&assign) && error_code_ != int(ClErr::INVALID_CHARACTER))
      return false;

    if      (parse_.isChar(','))
      parse_.skipChar();
    else if (parse_.isChar('}') && ! parse_.isCharAfter('}')) {
      parse_.skipChar();

      in_brackets = false;
    }
    else {
      error_code_ = int(ClErr::INVALID_CHARACTER);
      return false;
    }
  }

  return true;
}
Exemple #9
0
  bool
evaluateClause(addressType pattern)
{
	bool	match;

	match = FALSE;
	while (*pc != BLOCK_TAG)
		if (match)
			skipExpression();
		else
			match = (evaluateExpression() == pattern);
	if (match)
		evaluateExpression();
	else
		skipExpression();
	return(match);
}
Exemple #10
0
  void
skipMswitch(void)
{
	skipExpression();
	while (*pc != END_TAG)
		skipClause();
	overByte();
}
Exemple #11
0
  void
skipFunctionCall(void)
{
	int	argCount;

	overFunction();
	nextByte(argCount);
	while (argCount-- > 0)
		skipExpression();
}
Exemple #12
0
  addressType
evaluateBlock(void)
{
	while (*pc != END_TAG) {
		evaluateExpression();
		if (hitFreturn)
			while (*pc != END_TAG)
				skipExpression();
	}
	overByte();
	return(0);
}
Exemple #13
0
  addressType
evaluateMdoWhile(void)
{
	expressionPCType	testPoint;
	expressionPCType	endPoint;

	testPoint = pc;
	skipExpression();
	do {
		evaluateExpression;
		endPoint = pc;
		pc = testPoint;
	} while (evaluateExpression());
	pc = endPoint;
	return(0);
}
Exemple #14
0
  addressType
evaluateMwhile(void)
{
	expressionPCType	testPoint;
	expressionPCType	endPoint;

	testPoint = pc;
	if (evaluateExpression()) {
		do {
			evaluateExpression();
			endPoint = pc;
			pc = testPoint;
		} while (evaluateExpression());
		pc = endPoint;
	} else {
		skipExpression();
	}
}
Exemple #15
0
  void
bindFunctionArguments(functionType *theFunction, int argCount)
{
	argumentListType	*argList;

	argList = theFunction->functionArguments;
	while (argCount > 0) {
		if (argList == NULL) {
			error(TOO_MANY_FUNCTION_ARGUMENTS_ERROR);
			while (argCount-- > 0)
				skipExpression();
		} else {
			pushSymbol(argList->argumentSymbol,
					evaluateExpression());
			argList = argList->nextArgument;
			argCount--;
		}
	}
	while (argList != NULL) {
		pushSymbol(argList->argumentSymbol, 0);
		argList = argList->nextArgument;
	}
}
Exemple #16
0
  void
skipExpression(void)
{
	if (pc == NULL)
		return;
	switch (*pc++) {
	    case IDENTIFIER_TAG:
		overSymbol();
		break;

	    case FUNCTION_CALL_TAG:
		skipFunctionCall();
		break;

	    case NUMBER_TAG:
	    case RELOCATABLE_TAG:
		overNumber();
		break;

	    case CONDITION_CODE_TAG:
		overByte();
		break;

	    case SUBEXPRESSION_TAG:
		skipExpression();
		break;

	    case UNOP_TAG:
		skipUnop();
		break;

	    case BINOP_TAG:
		skipBinop();
		break;

	    case PREOP_TAG:
		skipPreop();
		break;

	    case POSTOP_TAG:
		skipPostop();
		break;

	    case HERE_TAG:
		break;

	    case STRING_TAG:
		skipString();
		break;

	    case ARRAY_TAG:
		skipArray();
		break;

	    case VALUE_TAG:
		overNumber();
		break;

	    case NULL_TAG:
		break;

	    case BLOCK_TAG:
		skipBlock();
		break;

	    case MDEFINE_TAG:
		skipMdefine();
		break;

	    case MVARIABLE_TAG:
		skipMvariable();
		break;

	    case MIF_TAG:
		skipMif();
		break;

	    case MFOR_TAG:
		skipMfor();
		break;

	    case MWHILE_TAG:
		skipMwhile();
		break;

	    case MDOWHILE_TAG:
		skipMdoWhile();
		break;

	    case MDOUNTIL_TAG:
		skipMdoUntil();
		break;

	    case PERFORM_TAG:
		skipExpression();
		break;

	    case GROUP_TAG:
		skipBlock();
		break;

	    case ASSERT_TAG:
		skipAssert();
		break;

	    case MSWITCH_TAG:
		skipMswitch();
		break;

	    case CLAUSE_TAG:
		skipClause();
		break;

	    case END_TAG:
		break;
	}
}
Exemple #17
0
  void
skipPreop(void)
{
	overByte();
	skipExpression();
}
Exemple #18
0
  void
skipMwhile(void)
{
	skipExpression();
	skipExpression();
}
Exemple #19
0
  void
skipMvariable(void)
{
	overSymbol();
	skipExpression();
}
Exemple #20
0
  void
skipArray(void)
{
	overSymbol();
	skipExpression();
}
Exemple #21
0
  void
skipMdoUntil(void)
{
	skipExpression();
	skipExpression();
}
Exemple #22
0
  void
skipAssert(void)
{
	skipExpression();
	skipString();
}
Exemple #23
0
bool
ClParserParser::
skipExpression(bool *assign)
{
  bool expression = false;

  error_code_ = 0;

  parse_.skipSpace();

  while (! parse_.eof()) {
    /* <expression> := <unary_operator> <expression> */

    if      (! expression && strchr(parser_unary_operator_chars, parse_.getCharAt()) != nullptr) {
      skipUnaryOperator();

      if (! skipExpression(assign))
        return false;

      if (*assign) {
        error_code_ = int(ClErr::INVALID_LVALUE_FOR_ASSIGNMENT);
        return false;
      }

      expression = true;
    }

    /* <expression> := '(' <expression> ')' */

    else if (! expression && parse_.isChar('(')) {
      bool assign1 = false;

      parse_.skipChar();

      if (! skipExpression(&assign1) && error_code_ != int(ClErr::INVALID_CHARACTER))
        return false;

      error_code_ = 0;

      parse_.skipSpace();

      if (! parse_.isChar(')')) {
        error_code_ = int(ClErr::MISSING_CLOSE_ROUND_BRACKET);
        return false;
      }

      parse_.skipChar();

      expression = true;
    }

    /* <expression> := <numeric_value> */

    else if (! expression &&
             (parse_.isDigit() || parse_.isChar('.'))) {
      if (! skipNumericValue())
        return false;

      expression = true;
    }

    /* <expression> := <string_value> */

    else if (! expression && parse_.isOneOf(parser_string_chars)) {
      if (! skipStringValue())
        return false;

      expression = true;
    }

    /* <expression> := <array_value> */

    else if (! expression && parse_.isChar('[')) {
      parse_.skipChar();

      if (! skipArray())
        return false;

      expression = true;
    }

    /* <expression> := <dict_value> */

    else if (! expression && parse_.isString("{{")) {
      parse_.skipChars(2);

      if (! skipDictionary())
        return false;

      expression = true;
    }

    /* <expression> := <list_value> */

    else if (! expression && parse_.isChar('{')) {
      parse_.skipChar();

      if (! skipList())
        return false;

      expression = true;
    }

    /* <expression> := <expression> <binary_operator> <expression> */

    else if (expression && parse_.isOneOf(parser_binary_operator_chars)) {
      bool assign1 = false;

      skipBinaryOperator(&assign1);

      if (error_code_ != 0)
        return false;

      if (! skipExpression(assign))
        return false;

      if (! assign1 && *assign) {
        error_code_ = int(ClErr::INVALID_LVALUE_FOR_ASSIGNMENT);
        return false;
      }

      if (assign1)
        *assign = true;

      expression = true;
    }

    /* <expression> := <expression> '?' <expression> ':' <expression> */

    else if (expression && parse_.isChar('?')) {
      bool assign1 = false;
      bool assign2 = false;

      parse_.skipChar();

      if (! skipExpression(&assign1) && error_code_ != int(ClErr::INVALID_CHARACTER))
        return false;

      error_code_ = 0;

      parse_.skipSpace();

      if (! parse_.isChar(':')) {
        error_code_ = int(ClErr::MISSING_COLON_OPERATOR);
        return false;
      }

      parse_.skipChar();

      if (! skipExpression(&assign2))
        return false;

      expression = true;
      *assign    = assign1 | assign2;
    }

    /* <expression> := <expression> '[' <expression> ',' .... ']' */

    else if (expression && parse_.isChar('[')) {
      parse_.skipChar();

      if (! skipArray())
        return false;

      expression = true;
    }

    /* <expression> := <expression> ',' <expression> */

    else if (expression && parse_.isChar(',')) {
      bool assign1 = false;

      ClParserStackMgrInst->push(CL_PARSER_OP_COMMA);

      ClParserStackMgrInst->toNext();

      parse_.skipChar();

      if (! skipExpression(&assign1))
        return false;

      expression = true;
    }

    /* <expression> := <variable>                               */
    /* <expression> := <variable> '.' <variable> '.' <...>      */
    /* <expression> := <variable> '[' <expression> ',' .... ']' */
    /* <expression> := <function> '(' <expression> ',' .... ')' */
    /* <expression> := <type>     '(' <expression> ',' .... ')' */

    else if (! expression && (parse_.isAlpha() || parse_.isChar('_'))) {
      skipIdentifier();

      if (error_code_ != 0)
        return false;

      parse_.skipSpace();

      if (parse_.isChar('(')) {
        parse_.skipChar();

        if (! skipArgList())
          return false;

        expression = true;
      }
      else {
        if (parse_.isChar('[')) {
          parse_.skipChar();

          if (! skipArray())
            return false;

          parse_.skipSpace();
        }

        while (parse_.isChar('.')) {
          parse_.skipChar();

          parse_.skipSpace();

          skipIdentifier();

          if (error_code_ != 0)
            return false;

          if (parse_.isChar('[')) {
            parse_.skipChar();

            if (! skipArray())
              return false;

            parse_.skipSpace();
          }
        }

        expression = true;
      }
    }
    else {
      error_code_ = int(ClErr::INVALID_CHARACTER);
      return false;
    }

    parse_.skipSpace();
  }

  if (! expression) {
    error_code_ = int(ClErr::NULL_EXPRESSION);
    return false;
  }

  return true;
}
Exemple #24
0
  void
skipMdefine(void)
{
	overSymbol();
	skipExpression();
}