fix: do not allow negation of a positive int literal

This commit is contained in:
2025-02-02 13:30:33 +00:00
parent 2588c8287d
commit da4b398bf0
2 changed files with 5 additions and 3 deletions

View File

@@ -2,7 +2,7 @@ package wacc
import parsley.Result
import parsley.Parsley
import parsley.Parsley.{atomic, many, pure}
import parsley.Parsley.{atomic, many, notFollowedBy, pure}
import parsley.combinator.{countSome, sepBy}
import parsley.expr.{precedence, SOps, InfixL, InfixN, InfixR, Prefix, Atoms}
import parsley.errors.combinator._
@@ -11,7 +11,7 @@ import cats.data.NonEmptyList
object parser {
import lexer.implicits.implicitSymbol
import lexer.{ident, integer, charLit, stringLit}
import lexer.{ident, integer, charLit, stringLit, negateCheck}
import ast._
def parse(input: String): Result[String, Program] = parser.parse(input)
@@ -32,7 +32,7 @@ object parser {
SOps(InfixL)(Mul from "*", Div from "/", Mod from "%") +:
SOps(Prefix)(
Not from "!",
Negate from "-",
Negate from (notFollowedBy(negateCheck) ~> "-"),
Len from "len",
Ord from "ord",
Chr from "chr"