From b3ecae5dbbb93b5176f363bab9393ac761fcb37f Mon Sep 17 00:00:00 2001 From: Barf-Vader <47476490+Barf-Vader@users.noreply.github.com> Date: Thu, 6 Feb 2025 23:52:13 +0000 Subject: [PATCH] fix: quotes around char and str errors, added errors for assign and arrayIndex --- src/main/wacc/Error.scala | 14 +++++++------- src/main/wacc/lexer.scala | 8 +++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/wacc/Error.scala b/src/main/wacc/Error.scala index 87e0a35..9d60b2a 100644 --- a/src/main/wacc/Error.scala +++ b/src/main/wacc/Error.scala @@ -20,12 +20,12 @@ def printError(error: Error)(using errorContent: String): Unit = { println( s"Duplicate declaration of identifier ${ident.v} at line: ${ident.getPosition.line} column: ${ident.getPosition.column}" ) - highlight(ident) + highlight(ident.getPosition, ident.v.length) case Error.UndefinedIdentifier(ident, identType) => println( s"Undefined ${identType.toString.toLowerCase()} ${ident.v} at line: ${ident.getPosition.line} column: ${ident.getPosition.column}" ) - highlight(ident) + highlight(ident.getPosition, ident.v.length) case Error.FunctionParamsMismatch(ident, expected, got) => println(s"Function ${ident.v} expects $expected parameters, got $got") case Error.TypeMismatch(expected, got) => @@ -34,13 +34,13 @@ def printError(error: Error)(using errorContent: String): Unit = { } -def highlight(ident: ast.Ident)(using errorContent: String): Unit = { +def highlight(pos: Position, size: Int)(using errorContent: String): Unit = { val lines = errorContent.split("\n") - val preLine = if (ident.getPosition.line > 1) lines(ident.getPosition.line - 2) else "" - val midLine = lines(ident.getPosition.line - 1) - val postLine = lines(ident.getPosition.line) - val linePointer = " " * (ident.getPosition.column) + ("^" * (ident.v.length)) + "\n" + val preLine = if (pos.line > 1) lines(pos.line - 2) else "" + val midLine = lines(pos.line - 1) + val postLine = lines(pos.line) + val linePointer = " " * (pos.column) + ("^" * (size)) + "\n" println( s">$preLine\n>$midLine\n$linePointer>$postLine" diff --git a/src/main/wacc/lexer.scala b/src/main/wacc/lexer.scala index 4a810c0..7a85dae 100644 --- a/src/main/wacc/lexer.scala +++ b/src/main/wacc/lexer.scala @@ -31,7 +31,9 @@ val errConfig = new ErrorConfig { "fst" -> Label("pair extraction"), "snd" -> Label("pair extraction"), "false" -> Label("boolean literal"), - "true" -> Label("boolean literal") + "true" -> Label("boolean literal"), + "=" -> Label("assignment"), + "[" -> Label("array index") ) } object lexer { @@ -83,8 +85,8 @@ object lexer { val errTokens = Seq( lexer.nonlexeme.names.identifier.map(v => s"identifier $v"), lexer.nonlexeme.integer.decimal32[Int].map(n => s"integer $n"), - lexer.nonlexeme.character.ascii.map(c => s"character literal $c"), - lexer.nonlexeme.string.ascii.map(s => s"string literal $s"), + lexer.nonlexeme.character.ascii.map(c => s"character literal \'$c\'"), + lexer.nonlexeme.string.ascii.map(s => s"string literal \"$s\""), character.whitespace.map(_ => "") ) ++ desc.symbolDesc.hardKeywords.map { k => lexer.nonlexeme.symbol(k).as(s"keyword $k")