Esempio n. 1
0
static sl_node_base_t*
bracketed_expression(sl_parse_state_t* ps)
{
    sl_node_base_t* node;
    expect_token(ps, SL_TOK_OPEN_PAREN);
    node = expression(ps);
    if(peek_token(ps)->type == SL_TOK_SEMICOLON) {
        sl_node_seq_t* seq = sl_make_seq_node(ps);
        sl_seq_node_append(ps, seq, node);
        while(peek_token(ps)->type == SL_TOK_SEMICOLON) {
            next_token(ps);
            sl_seq_node_append(ps, seq, expression(ps));
        }
        node = (sl_node_base_t*)seq;
    }
    expect_token(ps, SL_TOK_CLOSE_PAREN);
    return node;
}
Esempio n. 2
0
static sl_node_base_t*
statements(sl_parse_state_t* ps)
{
    sl_node_seq_t* seq = sl_make_seq_node(ps);
    sl_node_base_t* node;
    while(peek_token(ps)->type != SL_TOK_END) {
        node = statement(ps);
        if(node) {
            sl_seq_node_append(ps, seq, node);
        }
    }
    return (sl_node_base_t*)seq;
}
Esempio n. 3
0
static sl_node_base_t*
inline_raw(sl_parse_state_t* ps)
{
    sl_node_seq_t* seq = sl_make_seq_node(ps);
    while(1) {
        switch(peek_token(ps)->type) {
            case SL_TOK_OPEN_ECHO_TAG:
                sl_seq_node_append(ps, seq, echo_tag(ps));
                break;
            case SL_TOK_OPEN_RAW_ECHO_TAG:
                sl_seq_node_append(ps, seq, echo_raw_tag(ps));
                break;
            case SL_TOK_RAW:
                sl_seq_node_append(ps, seq, sl_make_raw_node(ps, next_token(ps)));
                break;
            case SL_TOK_END:
                return (sl_node_base_t*)seq;
            case SL_TOK_OPEN_TAG:
                return (sl_node_base_t*)seq;
            default: break;
        }
    }
}
Esempio n. 4
0
static sl_node_base_t*
body_expression(sl_parse_state_t* ps)
{
    sl_node_seq_t* seq = sl_make_seq_node(ps);
    sl_node_base_t* node;
    expect_token(ps, SL_TOK_OPEN_BRACE);
    while(peek_token(ps)->type != SL_TOK_CLOSE_BRACE) {
        node = statement(ps);
        if(node) {
            sl_seq_node_append(ps, seq, node);
        }
    }
    expect_token(ps, SL_TOK_CLOSE_BRACE);
    return (sl_node_base_t*)seq;
}