From 3f805fdde9c2cf83488c0cc5d42a7ce34409b337 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Fri, 23 Nov 2012 11:45:07 +0100 Subject: [PATCH] -std=fteqcc gets its own operator list --- lexer.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ main.c | 3 +++ 2 files changed, 50 insertions(+) diff --git a/lexer.h b/lexer.h index e58a98d..6990991 100644 --- a/lexer.h +++ b/lexer.h @@ -201,6 +201,53 @@ static const oper_info c_operators[] = { }; static const size_t c_operator_count = (sizeof(c_operators) / sizeof(c_operators[0])); +static const oper_info fte_operators[] = { + { "(", 0, opid1('('), ASSOC_LEFT, 99, OP_PREFIX}, /* paren expression - non function call */ + + { ".", 2, opid1('.'), ASSOC_LEFT, 15, 0 }, + { "(", 0, opid1('('), ASSOC_LEFT, 15, 0 }, /* function call */ + { "[", 2, opid1('['), ASSOC_LEFT, 15, 0 }, /* array subscript */ + + { "!", 1, opid2('!', 'P'), ASSOC_RIGHT, 14, OP_PREFIX }, + { "+", 1, opid2('+','P'), ASSOC_RIGHT, 14, OP_PREFIX }, + { "-", 1, opid2('-','P'), ASSOC_RIGHT, 14, OP_PREFIX }, + { "++", 1, opid3('+','+','P'), ASSOC_RIGHT, 14, OP_PREFIX }, + { "--", 1, opid3('-','-','P'), ASSOC_RIGHT, 14, OP_PREFIX }, + + { "*", 2, opid1('*'), ASSOC_LEFT, 13, 0 }, + { "/", 2, opid1('/'), ASSOC_LEFT, 13, 0 }, + { "&", 2, opid1('&'), ASSOC_LEFT, 13, 0 }, + { "|", 2, opid1('|'), ASSOC_LEFT, 13, 0 }, + + { "+", 2, opid1('+'), ASSOC_LEFT, 12, 0 }, + { "-", 2, opid1('-'), ASSOC_LEFT, 12, 0 }, + + { "<", 2, opid1('<'), ASSOC_LEFT, 10, 0 }, + { ">", 2, opid1('>'), ASSOC_LEFT, 10, 0 }, + { "<=", 2, opid2('<','='), ASSOC_LEFT, 10, 0 }, + { ">=", 2, opid2('>','='), ASSOC_LEFT, 10, 0 }, + { "==", 2, opid2('=','='), ASSOC_LEFT, 10, 0 }, + { "!=", 2, opid2('!','='), ASSOC_LEFT, 10, 0 }, + + { "=", 2, opid1('='), ASSOC_RIGHT, 8, 0 }, + { "+=", 2, opid2('+','='), ASSOC_RIGHT, 8, 0 }, + { "-=", 2, opid2('-','='), ASSOC_RIGHT, 8, 0 }, + { "*=", 2, opid2('*','='), ASSOC_RIGHT, 8, 0 }, + { "/=", 2, opid2('/','='), ASSOC_RIGHT, 8, 0 }, + { "%=", 2, opid2('%','='), ASSOC_RIGHT, 8, 0 }, + { "&=", 2, opid2('&','='), ASSOC_RIGHT, 8, 0 }, + { "|=", 2, opid2('|','='), ASSOC_RIGHT, 8, 0 }, + + { "&&", 2, opid2('&','&'), ASSOC_LEFT, 5, 0 }, + { "||", 2, opid2('|','|'), ASSOC_LEFT, 5, 0 }, + + { ",", 2, opid1(','), ASSOC_LEFT, 2, 0 }, + + { "?", 3, opid2('?',':'), ASSOC_RIGHT, 1, 0 }, + { ":", 3, opid2(':','?'), ASSOC_RIGHT, 1, 0 } +}; +static const size_t fte_operator_count = (sizeof(fte_operators) / sizeof(fte_operators[0])); + static const oper_info qcc_operators[] = { { "(", 0, opid1('('), ASSOC_LEFT, 99, OP_PREFIX}, /* paren expression - non function call */ diff --git a/main.c b/main.c index ce09f35..76e4007 100644 --- a/main.c +++ b/main.c @@ -458,6 +458,9 @@ int main(int argc, char **argv) { if (opts_standard == COMPILER_GMQCC) { operators = c_operators; operator_count = c_operator_count; + } else if (opts_standard == COMPILER_FTEQCC) { + operators = fte_operators; + operator_count = fte_operator_count; } else { operators = qcc_operators; operator_count = qcc_operator_count;