From bd8cd94816db77833517508e2a495e72870f234d Mon Sep 17 00:00:00 2001 From: fredrikr79 Date: Thu, 18 Sep 2025 07:01:08 +0200 Subject: [PATCH] theory and docs --- assignment2/README.md | 5 ++- assignment2/main.oz | 4 +-- assignment2/theory.md | 77 +++++++++++++++++++++++++++++++++++++++++ assignment2/theory.pdf | Bin 0 -> 31756 bytes 4 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 assignment2/theory.md create mode 100644 assignment2/theory.pdf diff --git a/assignment2/README.md b/assignment2/README.md index 740eb63..cbbf969 100644 --- a/assignment2/README.md +++ b/assignment2/README.md @@ -1,3 +1,6 @@ ## running this program -i switched to doing this in vscode. as such, the source code has changed a bit, and attached are my List.oz solutions from the last assignment, along with this assignments solution. \ No newline at end of file +i switched to doing this in vscode. as such, the source code has changed a bit +from the last assignment and no longer makes use of the functor syntax. now you +should be able to simply feed the file to run the program and test the code. + diff --git a/assignment2/main.oz b/assignment2/main.oz index e2279c8..42f2509 100644 --- a/assignment2/main.oz +++ b/assignment2/main.oz @@ -1,5 +1,3 @@ -\insert './List.oz' - local fun {Lex Input} {String.tokens Input & } @@ -82,4 +80,4 @@ local in {ExpressionTreeInternal Tokens nil} % this is where ExpressionTree starts end {Show {Interpret {Tokenize {Lex "3 10 9 * - 7 +"}}}} -end \ No newline at end of file +end diff --git a/assignment2/theory.md b/assignment2/theory.md new file mode 100644 index 0000000..31e5e74 --- /dev/null +++ b/assignment2/theory.md @@ -0,0 +1,77 @@ +--- +title: theory questions +date: 2025-09-18 +author: fredrik robertsen +--- + +## task 1) mdc + +i answered the next section first (task 2), but this is essentially the same +process. using an auxiliary function, we can interpret the tokens sequentially +from left-to-right by adding numbers to the stack (which is passed down the +recursion as an argument to the auxiliary function, so that we can access the +elements on the stack at arbitrary recursion depth) and popping some upon +discovering a non-number. once we have popped some numbers we can simply perform +the operation that the token corresponds to and push the result onto the stack. + +## task 2) postfix conversion + +the high-level overview of the algorithm is simply that you have a stack that +stores the current numbers you've encountered when reading the tokens +left-to-right. then you consume the top two elements of the stack when you find +a binary operator and push the resulting expression. doing so recursively +creates a tree of the infix operations. + +this is handy, because postfix notation has no ambiguity when it comes to +operator precedence, and as such can be useful for calculators with a simple +lex/parse/interpret implementation. going the other way, from an infix +expression to a postfix one is more challenging, due to the operator +precedences. + +this algorithm is essentially the shunting-yard algorithm, one you'll quickly +meet if you do any amount of parsing, such as if you implement a calculator of +your own. https://en.wikipedia.org/wiki/Shunting_yard_algorithm + +## task 3) theory + +### a) + +we can define a formal grammar that specifies the accepted _lexemes_ in our mdc +implementation: + +``` +let G = (V, S, R, v), where + V = {e}, % e is the empty string + S = {n | n in N} union {+, -, *, /, p, d, c, i}, + R = {(e, s) | s in S}, + v = e +``` + +### b) + +using extended backus-naur form, we can express the grammar of ExpressionTree +like so: + +``` + ::= plus | minus | multiply | divide + ::= number + | ( ) +``` + +the program outputs an ``, which is a nested non-terminal formatted +with parentheses to denote the order of operations, i.e. depth of nesting. + +### c) + +the grammar of a) is regular because all we do is of the form ` ::= s` +(map to symbol), which is one of the three valid rules for a regular grammar, +the other two being ` ::= empty` (map to empty) and ` ::= s` (map +symbol to right of variable). + +the grammar of b) is context-free because we freely string non-terminals +together without requiring any information about the context of the non-terminal +we are expanding. i.e. all our rules are of the form + +``` + ::= str, where str is any sequence of variables and symbols +``` diff --git a/assignment2/theory.pdf b/assignment2/theory.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e4629f0d40b78486ffc6e94520fd498f3593bf10 GIT binary patch literal 31756 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 N%*cXERn^ts4FJeWSxEo@ literal 0 HcmV?d00001