Exemple #1
0
int picolGetToken(picolInterp *i, picolParser *p) {
    int rc;
    while(1) {
        if (!p->len) {
            if (p->type != PT_EOL && p->type != PT_EOF)
                p->type = PT_EOL;
            else p->type = PT_EOF;
            return PICOL_OK;
        }
        switch(*p->p) {
            case ' ': case '\t':
                if (p->insidequote) return picolParseString(p);
                else                return picolParseSep(p);
            case '\n': case '\r': case ';':
                if (p->insidequote) return picolParseString(p);
                else                return picolParseEol(p);
            case '[': rc = picolParseCmd(p);
                      if(rc == PICOL_ERR) return picolErr(i,"missing close-bracket");
                      return rc;
            case '$':   return picolParseVar(p);
                                  // case '#': if (p->type == PT_EOL) {picolParseComment(p);continue;}
            default:              return picolParseString(p);
        }
    }
}
Exemple #2
0
int picolGetToken(struct picolParser *p) {
    while(1) {
        if (!p->len) {
            if (p->type != PT_EOL && p->type != PT_EOF)
                p->type = PT_EOL;
            else
                p->type = PT_EOF;
            return PICOL_OK;
        }
        switch(*p->p) {
        case ' ': case '\t': case '\r':
            if (p->insidequote) return picolParseString(p);
            return picolParseSep(p);
        case '\n': case ';':
            if (p->insidequote) return picolParseString(p);
            return picolParseEol(p);
        case '[':
            return picolParseCommand(p);
        case '$':
            return picolParseVar(p);
        case '#':
            if (p->type == PT_EOL) {
                picolParseComment(p);
                continue;
            }
            return picolParseString(p);
        default:
            return picolParseString(p);
        }
    }
    return PICOL_OK; /* unreached */
}
Exemple #3
0
int picolParseVar(picolParser *p) {
    int parened = 0;
    p->start = ++p->p; p->len--; /* skip the $ */
    if (*p->p == '{') {
        picolParseBrace(p);
        p->type = PT_VAR;
        return PICOL_OK;
    }
    if(COLONED(p->p)) {p->p += 2; p->len -= 2;}
    /*  while(isalnum(*p->p) || strchr("()_",*p->p)) { p->p++; p->len--; }*/
#if 1
    while(myisalnum(*p->p) || *p->p == '_' || *p->p=='('||*p->p==')') {
        if(*p->p=='(') parened = 1;
        p->p++; p->len--;
    }
    if(!parened && *(p->p-1)==')') {p->p--; p->len++;}
#endif
    if (p->start == p->p) { /* It's just a single char string "$" */
        picolParseString(p);
        p->start--; p->len++; /* back to the $ sign */
        p->type = PT_VAR;
        return PICOL_OK;
    } else RETURN_PARSED(PT_VAR);
}