mirror of
https://github.com/Noratrieb/jompiler.git
synced 2026-01-17 07:15:03 +01:00
more
This commit is contained in:
parent
923e6f2352
commit
767cebafd8
2 changed files with 21 additions and 3 deletions
22
index.js
22
index.js
|
|
@ -103,7 +103,8 @@ function lex(input) {
|
||||||
case "{":
|
case "{":
|
||||||
case "}":
|
case "}":
|
||||||
case ",":
|
case ",":
|
||||||
case ";": {
|
case ";":
|
||||||
|
case "+": {
|
||||||
tokens.push({
|
tokens.push({
|
||||||
kind: head,
|
kind: head,
|
||||||
span: i - 1,
|
span: i - 1,
|
||||||
|
|
@ -258,8 +259,23 @@ function parse(tokens) {
|
||||||
return lhs;
|
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);
|
const parseLogicalOr = generateBinaryParser(["||"], parseLogicalAnd);
|
||||||
|
// TODO conditional operator
|
||||||
const parseAssignment = generateBinaryParser(
|
const parseAssignment = generateBinaryParser(
|
||||||
["=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", , "^=", "|="],
|
["=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", , "^=", "|="],
|
||||||
parseLogicalOr
|
parseLogicalOr
|
||||||
|
|
@ -516,6 +532,8 @@ function lower(ast) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "+": {
|
case "+": {
|
||||||
|
codegenExpr(ib, expr.rhs);
|
||||||
|
assert(false);
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`unsupported expr: ${expr.kind}`);
|
throw new Error(`unsupported expr: ${expr.kind}`);
|
||||||
|
|
|
||||||
2
input.c
2
input.c
|
|
@ -7,5 +7,5 @@ int main(int argc)
|
||||||
|
|
||||||
int thisismyfakeconstantbecauseidonthaveconstant(int x)
|
int thisismyfakeconstantbecauseidonthaveconstant(int x)
|
||||||
{
|
{
|
||||||
return 9;
|
return 1 + 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue