From 767cebafd811c123141615279c7fda207c9f7a8e Mon Sep 17 00:00:00 2001 From: Noratrieb <48135649+Noratrieb@users.noreply.github.com> Date: Sat, 23 Nov 2024 00:04:53 +0100 Subject: [PATCH] more --- index.js | 22 ++++++++++++++++++++-- input.c | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index cc2b86e..d7ccfb1 100644 --- a/index.js +++ b/index.js @@ -103,7 +103,8 @@ function lex(input) { case "{": case "}": case ",": - case ";": { + case ";": + case "+": { tokens.push({ kind: head, span: i - 1, @@ -258,8 +259,23 @@ function parse(tokens) { return lhs; } - const parseLogicalAnd = generateBinaryParser(["&&"], parsePostfix); + const parseMultiplicative = generateBinaryParser( + ["*", "/", "%"], + parsePostfix + ); + const parseAdditive = generateBinaryParser(["+", "-"], parseMultiplicative); + const parseShift = generateBinaryParser(["<<", ">>"], parseAdditive); + const parseRelational = generateBinaryParser( + ["<", ">", "<=", ">="], + parseShift + ); + const parseEquality = generateBinaryParser(["==", "!="], parseRelational); + const parseAnd = generateBinaryParser(["&"], parseEquality); + const parseExclusiveOr = generateBinaryParser(["^"], parseAnd); + const parseInclusiveOr = generateBinaryParser(["|"], parseExclusiveOr); + const parseLogicalAnd = generateBinaryParser(["&&"], parseInclusiveOr); const parseLogicalOr = generateBinaryParser(["||"], parseLogicalAnd); + // TODO conditional operator const parseAssignment = generateBinaryParser( ["=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", , "^=", "|="], parseLogicalOr @@ -516,6 +532,8 @@ function lower(ast) { break; } case "+": { + codegenExpr(ib, expr.rhs); + assert(false); } default: { throw new Error(`unsupported expr: ${expr.kind}`); diff --git a/input.c b/input.c index 8d8b15a..c2d11ff 100644 --- a/input.c +++ b/input.c @@ -7,5 +7,5 @@ int main(int argc) int thisismyfakeconstantbecauseidonthaveconstant(int x) { - return 9; + return 1 + 1; }