From 5016fefc14109dc171ca2abcbd4e3fb767b428f4 Mon Sep 17 00:00:00 2001 From: Guy C Date: Tue, 4 Feb 2025 03:02:37 +0000 Subject: [PATCH] feat: lexer implements ErrorConfig for improved error messages --- src/main/wacc/lexer.scala | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/wacc/lexer.scala b/src/main/wacc/lexer.scala index 094ac12..ceeec45 100644 --- a/src/main/wacc/lexer.scala +++ b/src/main/wacc/lexer.scala @@ -4,7 +4,39 @@ import parsley.Parsley import parsley.character import parsley.token.{Basic, Lexer} import parsley.token.descriptions.* +import parsley.token.errors._ +import parsley.errors._ +val errConfig = new ErrorConfig { + override def labelSymbol = Map( + "!=" -> Label("binary operator"), + "%" -> Label("binary operator"), + "&&" -> Label("binary operator"), + "*" -> Label("binary operator"), + "+" -> Label("binary operator"), + "-" -> Label("binary operator"), + "/" -> Label("binary operator"), + "<" -> Label("binary operator"), + "<=" -> Label("binary operator"), + "==" -> Label("binary operator"), + ">" -> Label("binary operator"), + ">=" -> Label("binary operator"), + "||" -> Label("binary operator"), + "!" -> Label("unary operator"), + "len" -> Label("unary operator"), + "ord" -> Label("unary operator"), + "chr" -> Label("unary operator"), + "bool" -> Label("valid type"), + "char" -> Label("valid type"), + "int" -> Label("valid type"), + "pair" -> Label("valid type"), + "string" -> Label("valid type"), + "fst" -> Label("pair extraction"), + "snd" -> Label("pair extraction"), + "false" -> Label("boolean value"), + "true" -> Label("boolean value") + ) +} object lexer { private val desc = LexicalDesc.plain.copy( nameDesc = NameDesc.plain.copy( @@ -43,7 +75,7 @@ object lexer { ) ) - private val lexer = Lexer(desc) + private val lexer = Lexer(desc, errConfig) val ident = lexer.lexeme.names.identifier val integer = lexer.lexeme.integer.decimal32[Int] val negateCheck = lexer.nonlexeme.symbol("-") ~> character.digit