Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 0153c87 in mainline for uspace/app/bithenge/script.c


Ignore:
Timestamp:
2012-08-10T20:09:36Z (9 years ago)
Author:
Sean Bartell <wingedtachikoma@…>
Branches:
lfn, master
Children:
6be4142
Parents:
c9797067
Message:

Bithenge: more FAT, operators, and fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bithenge/script.c

    rc9797067 r0153c87  
    5656        TOKEN_ERROR,
    5757        TOKEN_EOF,
     58        TOKEN_GREATER_THAN_OR_EQUAL,
    5859        TOKEN_IDENTIFIER,
    5960        TOKEN_INTEGER,
     61        TOKEN_INTEGER_DIVIDE,
    6062        TOKEN_LEFT_ARROW,
     63        TOKEN_LESS_THAN_OR_EQUAL,
     64        TOKEN_NOT_EQUAL,
    6165
    6266        /* Keywords */
     
    272276                        state->buffer_pos++;
    273277                        state->token = TOKEN_LEFT_ARROW;
     278                } else if (state->buffer[state->buffer_pos] == '=') {
     279                        state->buffer_pos++;
     280                        state->token = TOKEN_LESS_THAN_OR_EQUAL;
     281                }
     282        } else if (ch == '>') {
     283                state->token = ch;
     284                state->buffer_pos++;
     285                if (state->buffer[state->buffer_pos] == '=') {
     286                        state->buffer_pos++;
     287                        state->token = TOKEN_GREATER_THAN_OR_EQUAL;
    274288                }
    275289        } else if (ch == '=') {
     
    280294                        state->buffer_pos++;
    281295                }
     296        } else if (ch == '/') {
     297                state->token = ch;
     298                state->buffer_pos++;
     299                if (state->buffer[state->buffer_pos] == '/') {
     300                        state->token = TOKEN_INTEGER_DIVIDE;
     301                        state->buffer_pos++;
     302                }
     303        } else if (ch == '!') {
     304                state->token = ch;
     305                state->buffer_pos++;
     306                if (state->buffer[state->buffer_pos] == '=') {
     307                        state->token = TOKEN_NOT_EQUAL;
     308                        state->buffer_pos++;
     309                }
    282310        } else {
    283311                state->token = ch;
     
    388416        PRECEDENCE_NONE,
    389417        PRECEDENCE_EQUALS,
     418        PRECEDENCE_COMPARE,
    390419        PRECEDENCE_ADD,
    391420        PRECEDENCE_MULTIPLY,
     
    401430        case '*':
    402431                return BITHENGE_EXPRESSION_MULTIPLY;
     432        case TOKEN_INTEGER_DIVIDE:
     433                return BITHENGE_EXPRESSION_INTEGER_DIVIDE;
     434        case '%':
     435                return BITHENGE_EXPRESSION_MODULO;
     436        case '<':
     437                return BITHENGE_EXPRESSION_LESS_THAN;
     438        case TOKEN_LESS_THAN_OR_EQUAL:
     439                return BITHENGE_EXPRESSION_LESS_THAN_OR_EQUAL;
     440        case '>':
     441                return BITHENGE_EXPRESSION_GREATER_THAN;
     442        case TOKEN_GREATER_THAN_OR_EQUAL:
     443                return BITHENGE_EXPRESSION_GREATER_THAN_OR_EQUAL;
    403444        case TOKEN_EQUALS:
    404445                return BITHENGE_EXPRESSION_EQUALS;
     446        case TOKEN_NOT_EQUAL:
     447                return BITHENGE_EXPRESSION_NOT_EQUALS;
    405448        default:
    406449                return BITHENGE_EXPRESSION_INVALID_BINARY_OP;
     
    414457        case BITHENGE_EXPRESSION_SUBTRACT:
    415458                return PRECEDENCE_ADD;
    416         case BITHENGE_EXPRESSION_MULTIPLY:
     459        case BITHENGE_EXPRESSION_MULTIPLY: /* fallthrough */
     460        case BITHENGE_EXPRESSION_INTEGER_DIVIDE: /* fallthrough */
     461        case BITHENGE_EXPRESSION_MODULO:
    417462                return PRECEDENCE_MULTIPLY;
    418         case BITHENGE_EXPRESSION_EQUALS:
     463        case BITHENGE_EXPRESSION_LESS_THAN: /* fallthrough */
     464        case BITHENGE_EXPRESSION_LESS_THAN_OR_EQUAL: /* fallthrough */
     465        case BITHENGE_EXPRESSION_GREATER_THAN: /* fallthrough */
     466        case BITHENGE_EXPRESSION_GREATER_THAN_OR_EQUAL:
     467                return PRECEDENCE_COMPARE;
     468        case BITHENGE_EXPRESSION_EQUALS: /* fallthrough */
     469        case BITHENGE_EXPRESSION_NOT_EQUALS:
    419470                return PRECEDENCE_EQUALS;
    420471        default:
     
    614665                next_token(state);
    615666
    616                 bithenge_expression_t *expr2 = parse_postfix_expression(state);
     667                bithenge_expression_t *expr2 =
     668                    parse_expression_precedence(state, precedence);
    617669                if (state->error != EOK) {
    618670                        bithenge_expression_dec_ref(expr2);
Note: See TracChangeset for help on using the changeset viewer.