From 26e3b9bc006a52bbe73984c80057b242c5925698 Mon Sep 17 00:00:00 2001 From: Erlend Hamnaberg Date: Mon, 2 Sep 2024 15:53:24 +0200 Subject: [PATCH 1/4] Alle oppgaver som bruker gramatikk er definert i ABNF --- foredrag/index.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/foredrag/index.md b/foredrag/index.md index e4e3051..0eaf440 100644 --- a/foredrag/index.md +++ b/foredrag/index.md @@ -181,6 +181,7 @@ Men først et sidespor med noen flere definisjoner. --- @@ -198,7 +199,7 @@ digit = "0" | digit excluding zero ; @@ -210,15 +211,17 @@ Det siste oppgavesettet kommer til å bruke dette. [wikipedia](https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form) +Også tilgjengelig som PDF [her](Augmented_Backus–Naur_form.pdf) + + ``` rule = definition / alternate definition ; comment CR LF ``` --- From f4f8b5cae95ec9146f8d9e3926527db7a238638c Mon Sep 17 00:00:00 2001 From: Eirik Meland Date: Mon, 2 Sep 2024 15:39:11 +0200 Subject: [PATCH 2/4] typo (cherry picked from commit c27b8523b38abb625c498338c7f0bdb5df7bfcd2) --- foredrag/index.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/foredrag/index.md b/foredrag/index.md index 0eaf440..e2574a7 100644 --- a/foredrag/index.md +++ b/foredrag/index.md @@ -20,13 +20,13 @@ Hvorfor er vi her? --- @@ -289,7 +289,7 @@ def parser[O]: String => ParseResult[O] = ??? Enda mer forenklet og det vi kommer til å bruke i resten av presentasjonen og oppgaveløsningen er at vi tar en input av String og produserer et resultat av en type O. -Det som er viktig her er at vi kan for enkelhetensskyld på en streng som en collection av karakterer og +Det som er viktig her er at vi kan for enkelhetensskyld se på en streng som en collection av karakterer og det er det vi håndterer. --> From ad0229731fe6efde51b7f145afdeef031acd7363 Mon Sep 17 00:00:00 2001 From: Eirik Meland Date: Mon, 2 Sep 2024 16:09:44 +0200 Subject: [PATCH 3/4] fjernet oppgave som var allerede var kopiert til ABNF --- .../test/scala/arktekk/oppgave1/A_SimpleParsers.scala | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/oppgaver/src/test/scala/arktekk/oppgave1/A_SimpleParsers.scala b/oppgaver/src/test/scala/arktekk/oppgave1/A_SimpleParsers.scala index 570ab7b..59b6430 100644 --- a/oppgaver/src/test/scala/arktekk/oppgave1/A_SimpleParsers.scala +++ b/oppgaver/src/test/scala/arktekk/oppgave1/A_SimpleParsers.scala @@ -134,15 +134,4 @@ class A_SimpleParsers extends ParserSuite { assertParsesValid(p, validInputs) } - - // ABNF - test("parse '1*a b 1*a' med char, ~ og rep") { - val validInputs = List("aaba", "aba", "aaaabaaa") - val invalidInputs = List("baaa", "aabbaa") - - val p = Parser.char('a').rep ~ Parser.char('b') ~ Parser.char('a').rep - - assertParsesValid(p, validInputs) - assertParsesInvalid(p, invalidInputs) - } } From bdff7c9143a6f73fce20740c5e782ae4aba1d7b0 Mon Sep 17 00:00:00 2001 From: Erlend Hamnaberg Date: Mon, 2 Sep 2024 16:51:41 +0200 Subject: [PATCH 4/4] Legg til escape og unescape av jsonpath --- .../src/test/scala/arktekk/oppgave2/Path.scala | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/oppgaver/src/test/scala/arktekk/oppgave2/Path.scala b/oppgaver/src/test/scala/arktekk/oppgave2/Path.scala index e003d7e..3df1bb2 100644 --- a/oppgaver/src/test/scala/arktekk/oppgave2/Path.scala +++ b/oppgaver/src/test/scala/arktekk/oppgave2/Path.scala @@ -8,9 +8,27 @@ enum Ref { case Property(name: String) case Index(idx: Int) extends Ref with ArrayRef case EndOfList extends Ref with ArrayRef + + def unescape: Ref = this match + case Property(name) => Property(name.replaceAll("~1", "/").replaceAll("~0", "~")) + case i: Index => i + case EndOfList => EndOfList + + def escape: Ref = this match + case Property(name) => Property(name.replaceAll("~", "~0").replaceAll("/", "~1")) + case i: Index => i + case EndOfList => EndOfList } enum Path { case Root case Refs(parts: NonEmptyList[Ref]) + + def unescape: Path = this match + case Path.Root => Path.Root + case Path.Refs(parts) => Path.Refs(parts.map(_.unescape)) + + def escape: Path = this match + case Path.Root => Path.Root + case Path.Refs(parts) => Path.Refs(parts.map(_.escape)) }