Пример #1
0
static bool parseList(ParseTreeNode* parentNode)
{
	// Store current state for rolling back if we fail
	int curToken = said_token;
	int curTreePos = said_tree_pos;
	ParseTreeNode* curRightChild = parentNode->right;

	bool found;

	ParseTreeNode* newParent = parentNode;

	found = parseListEntry(newParent);

	if (found) {

		newParent = newParent->right;

		found = parseComma(newParent);

		return true;

	}

	// Rollback
	said_token = curToken;
	said_tree_pos = curTreePos;
	parentNode->right = curRightChild;
	return false;
}
Пример #2
0
void Parser::parse(list<Token> tokens) {
  for (list<Token>::iterator it=tokens.begin(); it != tokens.end(); it++) {
    token = *it;
    TokenType type = token.getType();

    if (comment && type != LINE_END) continue;

    switch(type) {
      case SEMICOLON:
        parseSemicolon();
        break;

      case LINE_START:
        parseLineStart();
        break;

      case LINE_END:
        parseLineEnd();
        break;
        
      case COLON:
        parseColon();
        break;

      case WHITESPACE:
        parseWhitespace();
        break;

      case COMMA:
        parseComma();
        break;

      case TEXT:
        parseText();
        break;
    }
  }
}