From 2465cf84b78a993943064e828363ee265e3db534 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Sat, 30 Apr 2022 09:46:03 +0200 Subject: [PATCH] some stuff --- W1/calculator.fsx | 268 +++++++++++++++++++++++++++++++++++++ W1/report/main.aux | 5 + W1/report/main.fdb_latexmk | 20 +++ W1/report/main.fls | 43 ++++++ W1/report/main.log | 64 +++++++++ W1/report/main.pdf | Bin 0 -> 28488 bytes W1/report/main.synctex.gz | Bin 0 -> 1270 bytes W1/report/main.tex | 16 +++ 8 files changed, 416 insertions(+) create mode 100644 W1/calculator.fsx create mode 100644 W1/report/main.aux create mode 100644 W1/report/main.fdb_latexmk create mode 100644 W1/report/main.fls create mode 100644 W1/report/main.log create mode 100644 W1/report/main.pdf create mode 100644 W1/report/main.synctex.gz create mode 100644 W1/report/main.tex diff --git a/W1/calculator.fsx b/W1/calculator.fsx new file mode 100644 index 0000000..53ef0ad --- /dev/null +++ b/W1/calculator.fsx @@ -0,0 +1,268 @@ +(* ABSTRACT SYNTAX *) + +type VALUE = INT of int + +type BINOP = BPLUS | BMINUS | BTIMES + +type RANGEOP = RSUM | RPROD | RMAX | RARGMAX + +type EXP = + | CONSTANT of VALUE + | VARIABLE of string + | OPERATE of BINOP * EXP * EXP + | LET_IN of string * EXP * EXP + | OVER of RANGEOP * string * EXP * EXP * EXP + +(* A list mapping variable names to their values. *) +type SymTab = (string * VALUE) list + +(* Inserts a variable into the variable table. *) +let bind v k vtab = (v, k) :: vtab : SymTab + +(* Lookup a the value of a variable. *) +let rec lookup v = function + | (v', k) :: vtab -> if v = v' then k else lookup v vtab + | (_ : SymTab) -> failwith ("unbound variable : " + v) + +(* HELP FUNCTIONS *) +let VALUEtoint = function INT x -> x + +(* EVALUATION *) + +(***************************************************** + * TODO: Task 2: complete the definition of `eval`. You may also + * define any auxiliary functions as you see fit, to help express `eval` + * as cleanly and concisely as possible. + ****************************************************) + +(* The evaluation function. *) +let rec eval (vtab : SymTab) (e : EXP) : VALUE = + match e with + | CONSTANT n -> n + | VARIABLE v -> + lookup v vtab + | OPERATE (op, e1, e2) -> + let exp1 = VALUEtoint (eval vtab e1) + let exp2 = VALUEtoint (eval vtab e2) + match op with + | BPLUS -> INT (exp1 + exp2) + | BMINUS -> INT (exp1 - exp2) + | BTIMES -> INT (exp1 * exp2) + | LET_IN (var, e1, e2) -> + let exp1 = eval vtab e1 + let vtab = bind var exp1 vtab + eval vtab e2 + | OVER (rop, var, e1, e2, e3) -> + let exp1 = VALUEtoint (eval vtab e1) + let exp2 = VALUEtoint (eval vtab e2) + let results = [ + for i in exp1..exp2 -> + let vtab = bind var (INT i) vtab + eval vtab e3 + ] + match rop with + | RSUM -> List.fold (fun (INT acc) (INT elem) -> INT (acc + elem)) (INT 0) results + | RPROD -> List.fold (fun (INT acc) (INT elem) -> INT (acc * elem)) (INT 1) results + | RMAX -> List.fold (fun (INT acc) (INT elem) -> INT (max acc elem)) results[0] results + | RARGMAX -> + let max_elem = List.fold (fun (INT acc) (INT elem) -> INT (max acc elem)) results[0] results + INT ((List.findIndex ((=) max_elem) results) + exp1) + + +(* YOU SHOULDN'T NEED TO MODIFY ANYTHING IN THE REMAINDER OF THIS FILE, + BUT YOU ARE WELCOME TO LOOK AT IT. *) + +(* LEXER + ********** + * A lexer, is a program which reads a stream/list of chars, + * and transforms them into a list of tokens. + ********** + * This example code is very simple and naive, but it should not + * introduce anything which you have not seen on the PoP course. + * Furhter more, we hope that you will read it, and get an intuition + * about what is going on + ********** + *) + +type TOKEN = + | NUM of int | ID of string + | PLUS | MULT | MINUS | EQ + | LPAR | RPAR | LET | IN + | SUM | PROD | MAX | ARGMAX | OF | TO + +let explode (s : string) = [for c in s -> c] +let isA t c = List.exists (fun c' -> c = c') t + +let digit = ['0'..'9'] +let letter = ['a'..'z'] +let symbol = explode "+-*/=()" +let whitespace = explode " \t\n" + +let keyword = ["let"; "in"; "sum"; "prod"; "max"; "argmax"; "of"; "to"] + +let rec lex = function + | (c :: _) as cs when c |> isA digit -> lexNum "" cs + | (c :: _) as cs when c |> isA letter -> lexWord "" cs + | (c :: cs) when c |> isA symbol -> lexSymbol c :: lex cs + | (c :: cs) when c |> isA whitespace -> lex cs + | (c :: cs) -> failwith ("invalid character : " + string c) + | (_ : char list) -> ([] : TOKEN list) + +and lexNum s = function + | (c :: cs) when c |> isA digit -> lexNum (s + string c) cs + | cs -> (NUM (System.Int32.Parse s)) :: lex cs + +and lexWord s = function + | (c :: cs) when c |> isA (letter @ digit) -> lexWord (s + string c) cs + | cs -> + (if s |> isA keyword then getKeyWord s else ID s) :: lex cs + +and lexSymbol = function + | '+' -> PLUS + | '-' -> MINUS + | '*' -> MULT + | '=' -> EQ + | '(' -> LPAR + | ')' -> RPAR + | sym -> failwith ("Unknown Symbol : " + string sym) + +and getKeyWord = function + | "let" -> LET + | "in" -> IN + | "sum" -> SUM + | "prod" -> PROD + | "max" -> MAX + | "argmax" -> ARGMAX + | "to" -> TO + | "of" -> OF + | word -> failwith ("Invalid Keyword : " + word) + +(* PARSER + ********** + * A parser transforms the list of tokens to an abstract syntax tree, + * which reprecents the syntax of an expression. + ********** + * The example code uses a somewhat ad hoc approach. + * Later on in the course, we will see more systematic ways of + * constructing parsers. + *) + + +(* Returns tail of ts, assuming head of ts equals t *) +let expect t ts = + match ts with + | t' :: ts1 when t' = t -> ts1 + | _ -> failwith "parse error" + +(* Each parser function returns the expression parsed from the beginning + of the token list, together with any remaining tokens. *) + +let rec parse_exp ts = + match ts with + | LET :: ID v :: EQ :: ts1 -> + let (e1, ts2) = parse_exp ts1 + let ts3 = expect IN ts2 + let (e2, ts4) = parse_exp ts3 + (LET_IN (v,e1,e2), ts4) + | r :: ID v :: EQ :: ts1 when r |> isA [SUM; PROD; MAX; ARGMAX] -> + let (e1, ts2) = parse_exp ts1 + let ts3 = expect TO ts2 + let (e2, ts4) = parse_exp ts3 + let ts5 = expect OF ts4 + let (e3, ts6) = parse_exp ts5 + let rop = match r with + | SUM -> RSUM + | PROD -> RPROD + | MAX -> RMAX + | ARGMAX -> RARGMAX + | _ -> failwith ("Unknown range operation : " + string r) + (OVER (rop, v, e1, e2, e3), ts6) + | _ -> parse_arith ts + +and parse_arith ts = + let (e1, ts1) = parse_term ts + parse_terms e1 ts1 +and parse_terms e1 ts = + match ts with + | PLUS :: ts1 -> let (e2, ts2) = parse_term ts1 + parse_terms (OPERATE (BPLUS, e1,e2)) ts2 + | MINUS :: ts1 -> let (e2, ts2) = parse_term ts1 + parse_terms (OPERATE (BMINUS, e1,e2)) ts2 + | _ -> (e1, ts) + +and parse_term ts = + let (e1, ts1) = parse_factor ts + parse_factors e1 ts1 +and parse_factors e1 ts = + match ts with + | MULT :: ts1 -> let (e2, ts2) = parse_factor ts1 + parse_factors (OPERATE (BTIMES, e1,e2)) ts2 + | _ -> (e1, ts) + +and parse_factor ts = + match ts with + | ID v :: ts1 -> (VARIABLE v, ts1) + | NUM n :: ts1 -> (CONSTANT (INT n), ts1) + | LPAR :: ts1 -> + let (e, ts2) = parse_exp ts1 + let ts3 = expect RPAR ts2 + (e, ts3) + | _ -> failwith ("parse error") + +let parse ts = + let (e, ts1) = parse_exp ts + if ts1 = [] then e else failwith "parse error" + +(************* + * When interpreting code, we lex it into tokens, parse the tokens into an + * abstract syntax tree, and evaluate the tree into some value. + * The definition of what it means to be a value, and an expression (tree), + * can be found in the parser. + ************* + * In this code, the evaluation of such a tree has been reprecented, should + * be implemented in the below function [eval] {~_^} + *) + +(* FOR RUNNING A PROGRAM *) +let run program = (lex >> parse >> eval []) (explode program) + +(* Tests *) +let eval_test_constant = (eval [] (CONSTANT (INT 4)) = INT 4) + +//let eval_test_lookup = (eval [("x", INT 4)] (VARIABLE "x") = INT 4) + +let program0 = "1 - 2 - 3" + +let program1 = "let x = 4 in x + 3" + +let program2 = ("let x0 = 2 in \ + let x1 = x0 * x0 in \ + let x2 = x1 * x1 in x2 * x2") + +let program3 = "sum x = 1 to 4 of x*x" +let program4 = "max x = 0 to 10 of 5 * x - x * x" +let program5 = "argmax x = 0 to 10 of 5 * x - x * x" + +(* +let eval_test_arithmetic = (run program0 = INT -4) +let eval_test_let = (run program1 = INT 7) +let eval_test_nested_let = (run program2 = INT 30) +let eval_test_max = (run program4 = INT 6) +let eval_test_argmax = (run program4 = INT 2) +*) + +(* THIS FUNCTION CALLS RUN ON USER INPUT IN AN INTERACTIVE LOOP *) +let interpreter () = + let mutable running = true + printfn "Welcome to the calculator! Type \"exit\" to stop." + while running do + printf "Input an expression : " + let program = System.Console.ReadLine() + try + if program = "" then () + else if program = "exit" then running <- false + else printfn "Evaluation result : %A" (run program) + with + | Failure (msg) -> printfn "%s" msg + +interpreter () diff --git a/W1/report/main.aux b/W1/report/main.aux new file mode 100644 index 0000000..9d58a80 --- /dev/null +++ b/W1/report/main.aux @@ -0,0 +1,5 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {Task 1}}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {Task 2}}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {Task 3}}{1}{}\protected@file@percent } +\gdef \@abspage@last{1} diff --git a/W1/report/main.fdb_latexmk b/W1/report/main.fdb_latexmk new file mode 100644 index 0000000..8095965 --- /dev/null +++ b/W1/report/main.fdb_latexmk @@ -0,0 +1,20 @@ +# Fdb version 3 +["pdflatex"] 1651237923 "/home/nikolaj/Code/Datalogi/2022B4-IPS/IPS_W-assignments/W1/main.tex" "main.pdf" "main" 1651237923 + "/home/nikolaj/Code/Datalogi/2022B4-IPS/IPS_W-assignments/W1/main.tex" 1651237922 364 e3b792744da3753f628354d9558911dc "" + "/usr/share/texmf-dist/fonts/map/fontname/texfonts.map" 1647844622 3524 cb3e574dea2d1052e39280babc910dc8 "" + "/usr/share/texmf-dist/fonts/tfm/public/cm/cmbx12.tfm" 1647844622 1324 c910af8c371558dc20f2d7822f66fe64 "" + "/usr/share/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1647844622 1288 655e228510b4c2a1abe905c368440826 "" + "/usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb" 1647844622 32080 340ef9bf63678554ee606688e7b5339d "" + "/usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb" 1647844622 35752 024fb6c41858982481f6968b5fc26508 "" + "/usr/share/texmf-dist/tex/latex/base/article.cls" 1647844622 20144 8a7de377ae7a11ee924a7499611f5a9d "" + "/usr/share/texmf-dist/tex/latex/base/size10.clo" 1647844622 8448 96f18c76bf608a36ee6fbf021ac1dd32 "" + "/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def" 1647844622 29921 d0acc05a38bd4aa3af2017f0b7c137ce "" + "/usr/share/texmf-dist/web2c/texmf.cnf" 1647844622 39911 2da6c67557ec033436fe5418a70a8a61 "" + "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1650359669 4408072 42ceaa83bae76aebad711d3f3dd7f55f "" + "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1650359660 2924504 ea4c5c72b0c4652da661684b3e043938 "" + "main.aux" 1651237923 311 d89453a43fde1809b6531a97b3ddf7d3 "pdflatex" + "main.tex" 1651237922 364 e3b792744da3753f628354d9558911dc "" + (generated) + "main.aux" + "main.log" + "main.pdf" diff --git a/W1/report/main.fls b/W1/report/main.fls new file mode 100644 index 0000000..d157e28 --- /dev/null +++ b/W1/report/main.fls @@ -0,0 +1,43 @@ +PWD /home/nikolaj/Code/Datalogi/2022B4-IPS/IPS_W-assignments/W1 +INPUT /usr/share/texmf-dist/web2c/texmf.cnf +INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt +INPUT /home/nikolaj/Code/Datalogi/2022B4-IPS/IPS_W-assignments/W1/main.tex +OUTPUT main.log +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT /usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +INPUT ./main.aux +INPUT main.aux +INPUT main.aux +OUTPUT main.aux +INPUT /usr/share/texmf-dist/fonts/map/fontname/texfonts.map +INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmr12.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/public/cm/cmbx12.tfm +OUTPUT main.pdf +INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map +INPUT main.aux +INPUT /usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb diff --git a/W1/report/main.log b/W1/report/main.log new file mode 100644 index 0000000..8640f28 --- /dev/null +++ b/W1/report/main.log @@ -0,0 +1,64 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021/Arch Linux) (preloaded format=pdflatex 2022.4.19) 29 APR 2022 15:12 +entering extended mode + restricted \write18 enabled. + file:line:error style messages enabled. + %&-line parsing enabled. +**/home/nikolaj/Code/Datalogi/2022B4-IPS/IPS_W-assignments/W1/main.tex +(/home/nikolaj/Code/Datalogi/2022B4-IPS/IPS_W-assignments/W1/main.tex +LaTeX2e <2021-11-15> patch level 1 +L3 programming layer <2022-02-24> (/usr/share/texmf-dist/tex/latex/base/article.cls +Document Class: article 2021/10/04 v1.4n Standard LaTeX document class +(/usr/share/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2021/10/04 v1.4n Standard LaTeX file (size option) +) +\c@part=\count185 +\c@section=\count186 +\c@subsection=\count187 +\c@subsubsection=\count188 +\c@paragraph=\count189 +\c@subparagraph=\count190 +\c@figure=\count191 +\c@table=\count192 +\abovecaptionskip=\skip47 +\belowcaptionskip=\skip48 +\bibindent=\dimen138 +) (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2022-02-07 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count193 +\l__pdf_internal_box=\box50 +) (./main.aux) +\openout1 = `main.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 5. +LaTeX Font Info: ... okay on input line 5. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 5. +LaTeX Font Info: ... okay on input line 5. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 5. +LaTeX Font Info: ... okay on input line 5. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 5. +LaTeX Font Info: ... okay on input line 5. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 5. +LaTeX Font Info: ... okay on input line 5. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 5. +LaTeX Font Info: ... okay on input line 5. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 5. +LaTeX Font Info: ... okay on input line 5. + [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./main.aux) ) +Here is how much of TeX's memory you used: + 404 strings out of 478276 + 7535 string characters out of 5853013 + 298976 words of memory out of 5000000 + 18691 multiletter control sequences out of 15000+600000 + 469864 words of font info for 30 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 34i,5n,38p,193b,107s stack positions out of 5000i,500n,10000p,200000b,80000s + +Output written on main.pdf (1 page, 28488 bytes). +PDF statistics: + 18 PDF objects out of 1000 (max. 8388607) + 10 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/W1/report/main.pdf b/W1/report/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..610c17010028b677ea0b190fce72ad812a55b0a8 GIT binary patch literal 28488 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 literal 0 HcmV?d00001 diff --git a/W1/report/main.tex b/W1/report/main.tex new file mode 100644 index 0000000..66cedc8 --- /dev/null +++ b/W1/report/main.tex @@ -0,0 +1,16 @@ +\documentclass[a4paper]{article} + +\renewcommand{\thesection}{Task \arabic{section}} + +\begin{document} +\section{} +\begin{enumerate} + \item I am a DIKU Computer Science BSc, general profile + \item I have little to no proficiency with F\# + \item I have mininal knowledge of assembly programming + \item +\end{enumerate} + +\section{} +\section{} +\end{document} \ No newline at end of file