Ejemplo n.º 1
0
/*** Parse a statement ***/
Node* Parser::parseStatement()
{
	if(hasTokens(2) && peekToken().getType() == T_IDENTIFIER && peekToken(2).getType() == T_ASSIGN)
		return parseAssign();
	if(hasTokens(2) && peekToken().getType() == T_IDENTIFIER && peekToken(2).getType() == T_LPAREN)
		return parseCall();
	if(hasTokens() && peekToken().getType() == T_CALL)
		return parseCall();
	if(hasTokens() && peekToken().getType() == T_CASE)
		return parseCase();
	if(hasTokens() && peekToken().getType() == T_DO)
		return parseDo();
	if(hasTokens() && peekToken().getType() == T_END)
		return parseEnd();
	if(hasTokens() && peekToken().getType() == T_EXIT)
		return parseExit();
	if(hasTokens() && peekToken().getType() == T_FOR)
		return parseFor();
	if(hasTokens() && peekToken().getType() == T_IF)
		return parseIf();
	if(hasTokens() && peekToken().getType() == T_INPUT)
		return parseInput();
	if(hasTokens() && peekToken().getType() == T_OUTPUT)
		return parseOutput();
	if(hasTokens() && peekToken().getType() == T_REPEAT)
		return parseRepeat();
	if(hasTokens() && peekToken().getType() == T_RETURN)
		return parseReturn();
	if(hasTokens(2) && peekToken(1).getType() == T_IDENTIFIER && peekToken(2).getType() == T_LBRACKET)
		return parseSliceSelectAssign();
	if(hasTokens() && peekToken().getType() == T_WHILE)
		return parseWhile();
	throw ParserSyntaxException(getToken(), "Invalid statement!");
	return 0;
}
Ejemplo n.º 2
0
static BoardInfo* parseBoardInfo(uint8_t* data) {
    if(data[offset] == 0xc0) {
        offset++;
        return NULL;
    }
    int len = parseArraySize(data);
    BoardInfo* ret = malloc(sizeof(BoardInfo));
    for(int i = 0; i < len; i++) {
        if(i == 0) {
            ret->exit = parseExit(data);
        } else if(i == 1) {
            ret->transfer = parseTransfer(data, &(ret->transferLen));
        }
    }
    return ret;
}
Ejemplo n.º 3
0
static Transfer* parseTransfer(uint8_t *data, int *transferLen) {
    if(data[offset] == 0xc0) {
        offset++;
        return NULL;
    }
    int len = parseArraySize(data);
    Transfer* ret = malloc(sizeof(Transfer) * len);
    *transferLen = len;
    for(int i = 0; i < len; i++) {
        int len2 = parseArraySize(data);
        for(int j = 0; j < len2; j++) {
            if (j == 0) {
                ret[i].prevStation = parseInt(data);
            } else if (j == 1) {
                ret[i].toStation = parseInt(data);
            } else if (j == 2) {
                ret[i].nextStation = parseInt(data);
            } else if (j == 3) {
                ret[i].pos = parseExit(data);
            }
        }
    }
    return ret;
}