From 39515e4e32f18e281b9d01fc53b8a822b908efe0 Mon Sep 17 00:00:00 2001 From: nub31 Date: Mon, 27 Jan 2025 16:53:08 +0100 Subject: [PATCH] Support for parentheses in binary expressions --- Nub.Lang/Nub.Lang/Input/program.nub | 3 +-- Nub.Lang/Nub.Lang/Parsing/Parser.cs | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Nub.Lang/Nub.Lang/Input/program.nub b/Nub.Lang/Nub.Lang/Input/program.nub index a28281a..eaaf715 100644 --- a/Nub.Lang/Nub.Lang/Input/program.nub +++ b/Nub.Lang/Nub.Lang/Input/program.nub @@ -1,4 +1,3 @@ func main() { - let x = "test" == "test"; - syscall(60, x); + syscall(60, 5 + 3 * 5); } \ No newline at end of file diff --git a/Nub.Lang/Nub.Lang/Parsing/Parser.cs b/Nub.Lang/Nub.Lang/Parsing/Parser.cs index 2315a9d..1cafe69 100644 --- a/Nub.Lang/Nub.Lang/Parsing/Parser.cs +++ b/Nub.Lang/Nub.Lang/Parsing/Parser.cs @@ -237,12 +237,19 @@ public class Parser private ExpressionNode ParsePrimaryExpression() { var token = ExpectToken(); - return token switch + switch (token) { - LiteralToken literal => new LiteralNode(literal.Value, literal.Type), - IdentifierToken identifier => ParseExpressionIdentifier(identifier), - _ => throw new Exception($"Unexpected token type {token.GetType().Name}") - }; + case LiteralToken literal: + return new LiteralNode(literal.Value, literal.Type); + case IdentifierToken identifier: + return ParseExpressionIdentifier(identifier); + case SymbolToken { Symbol: Symbol.OpenParen }: + var expression = ParseExpression(); + ExpectSymbol(Symbol.CloseParen); + return expression; + default: + throw new Exception($"Unexpected token type {token.GetType().Name}"); + } } private ExpressionNode ParseExpressionIdentifier(IdentifierToken identifier)