@@ -104,7 +104,7 @@ since this is a bit tidies i allowed users to use expressions in the context
104104
105105(refer to the grammar defined above)
106106
107- shortened (not completely while-language correct ...) version
107+ shortened (not commpletely while-language correct ...) version
108108
109109#+begin_src
110110x0 := 0;
@@ -115,86 +115,41 @@ loop x2 do x0 := x0 + x1 end
115115#+end_src
116116
117117
118- #+begin_src shell
119- felix in ~/git-repos/hub/while on dev ● λ stack build
120- felix in ~/git-repos/hub/while on dev ● λ stack run
121-
122- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
123-
124- Enter the file name:
125- ./examples/multiplication-func.while
126- [READING .WHILE FILE] "./examples/multiplication-func.while"
127-
128- [DONE TOKENIZE]:
129- [MetaToken {getLineNumber = 1, getToken = VarToken {getVarName = "rv"}},
130- MetaToken {getLineNumber = 1, getToken = AssignToken},
131- MetaToken {getLineNumber = 1, getToken = ConstToken {getConstInt = 0}},
132- MetaToken {getLineNumber = 1, getToken = SemicolonToken},
133- MetaToken {getLineNumber = 2, getToken = VarToken {getVarName = "a"}},
134- MetaToken {getLineNumber = 2, getToken = AssignToken},
135- MetaToken {getLineNumber = 2, getToken = ConstToken {getConstInt = 420}},
136- MetaToken {getLineNumber = 2, getToken = SemicolonToken},
137- MetaToken {getLineNumber = 3, getToken = VarToken {getVarName = "b"}},
138- MetaToken {getLineNumber = 3, getToken = AssignToken},
139- MetaToken {getLineNumber = 3, getToken = ConstToken {getConstInt = 69}},
140- MetaToken {getLineNumber = 3, getToken = SemicolonToken},
141- MetaToken {getLineNumber = 5, getToken = WhileToken},
142- MetaToken {getLineNumber = 5, getToken = VarToken {getVarName = "b"}},
143- MetaToken {getLineNumber = 5, getToken = NotEqualToken},
144- MetaToken {getLineNumber = 5, getToken = ConstToken {getConstInt = 0}},
145- MetaToken {getLineNumber = 5, getToken = DoToken},
146- MetaToken {getLineNumber = 6, getToken = VarToken {getVarName = "temp"}},
147- MetaToken {getLineNumber = 6, getToken = AssignToken},
148- MetaToken {getLineNumber = 6, getToken = VarToken {getVarName = "rv"}},
149- MetaToken {getLineNumber = 6, getToken = SemicolonToken},
150- MetaToken {getLineNumber = 7, getToken = LoopToken},
151- MetaToken {getLineNumber = 7, getToken = VarToken {getVarName = "a"}},
152- MetaToken {getLineNumber = 7, getToken = DoToken},
153- MetaToken {getLineNumber = 7, getToken = VarToken {getVarName = "temp"}},
154- MetaToken {getLineNumber = 7, getToken = AssignToken},
155- MetaToken {getLineNumber = 7, getToken = VarToken {getVarName = "temp"}},
156- MetaToken {getLineNumber = 7, getToken = PlusToken},
157- MetaToken {getLineNumber = 7, getToken = ConstToken {getConstInt = 1}},
158- MetaToken {getLineNumber = 7, getToken = EndToken},
159- MetaToken {getLineNumber = 7, getToken = SemicolonToken},
160- MetaToken {getLineNumber = 8, getToken = VarToken {getVarName = "rv"}},
161- MetaToken {getLineNumber = 8, getToken = AssignToken},
162- MetaToken {getLineNumber = 8, getToken = VarToken {getVarName = "temp"}},
163- MetaToken {getLineNumber = 8, getToken = SemicolonToken},
164- MetaToken {getLineNumber = 10, getToken = VarToken {getVarName = "b"}},
165- MetaToken {getLineNumber = 10, getToken = AssignToken},
166- MetaToken {getLineNumber = 10, getToken = VarToken {getVarName = "b"}},
167- MetaToken {getLineNumber = 10, getToken = MinusToken},
168- MetaToken {getLineNumber = 10, getToken = ConstToken {getConstInt = 1}},
169- MetaToken {getLineNumber = 11, getToken = EndToken}]
170-
171- [DONE PARSING AST]:
172- Sequential
173- (Assignment "rv" (Constant {getConst = 0}))
174- (Sequential
175- (Assignment "a" (Constant {getConst = 420}))
176- (Sequential
177- (Assignment "b" (Constant {getConst = 69}))
178- (While
179- (Neq (Variable {getVar = "b"}) (Constant {getConst = 0}))
180- (Sequential
181- (Assignment "temp" (Variable {getVar = "rv"}))
182- (Sequential
183- (Loop
184- (Variable {getVar = "a"})
185- (Assignment "temp" (Add (Variable {getVar = "temp"}) (Constant {getConst = 1}))))
186- (Sequential
187- (Assignment "rv" (Variable {getVar = "temp"}))
188- (Assignment "b" (Subtract (Variable {getVar = "b"}) (Constant {getConst = 1})))))))))
189-
190- [OUTPUT OF EVALUATION]:
191- [("temp",28980),("b",0),("a",420),("rv",28980)]
118+ *** how to call `stack run`
192119
193- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
120+ #+begin_src shell :exports both :results output
121+ stack run
122+ #+end_src
194123
195- felix in ~/git-repos/hub/while on dev ● λ
124+ #+RESULTS:
125+ :
126+ : = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
127+ : [91m[Error][0m: Usage: stack run <filename>
128+ : Use 'stack run <filename>' to interpret a while source file.
129+ : = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
130+ :
131+
132+ #+begin_src shell :exports both :results output
133+ stack run ./examples/multiplication-func.while
196134#+end_src
197135
136+ #+RESULTS:
137+ #+begin_example
138+
139+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
140+
141+ [92m[Interpreting file][0m ./examples/multiplication-func.while
142+ [92m[READING .WHILE FILE][0m "./examples/multiplication-func.while"
143+ [92m[DONE TOKENIZE][0m
144+ [92m[DONE PARSING AST][0m
145+ [92m[RESULT OF EVALUATION][0m
146+ [("temp",28980),("b",0),("a",420),("rv",28980)]
147+
148+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
149+
150+ #+end_example
151+
152+
198153*** compile
199154
200155#+begin_src shell
@@ -225,40 +180,46 @@ stack exec hlint src/*.hs app/*.hs test/*.hs
225180
226181** requirements
227182
228- *** [[https://docs.haskellstack.org/en/stable/][Haskell Tool Stack]]
183+ *** using `apt`
184+
185+ **** [[https://docs.haskellstack.org/en/stable/][Haskell Tool Stack]]
229186
230187#+begin_src shell
231188curl -SL https://get.haskellstack.org/ | sh
232189#+end_src
233190
234- #+begin_example
235- Pro tip: you should look at the file before you run it
236- #+end_example
237191
238-
239- *** [[https://www.haskell.org/ghc/][Glasgow Haskell Compiler]]
192+ **** [[https://www.haskell.org/ghc/][Glasgow Haskell Compiler]]
240193
241194#+begin_src shell
242195apt install ghc
243196#+end_src
244197
245- #+begin_example
246- Pro tip: GHC has a interactive shell called `ghci`
198+ **** [[https://github.com/ndmitchell/hlint#readme][HLint]]
247199
248- - `:e` for edit
249- - `:l filename` for loading files
250- - `:r` for reloading
251- - etc.
252- #+end_example
200+ #+begin_src shell
201+ apt install hlint
202+ #+end_src
253203
254204
255- *** [[https://github.com/ndmitchell/hlint#readme][HLint]]
205+ *** using `nix`
256206
257207#+begin_src shell
258- apt install hlint
208+ nix-shell
209+ #+end_src
210+
211+ **** hlint
212+
213+ #+begin_src shell
214+ hlint src/*.hs app/*.hs test/*.hs
259215#+end_src
260216
261217
218+ **** build and run
219+
220+ same as before
221+
222+
262223** LICENSE (BSD-3-Clause)
263224
264225#+begin_src shell :exports both :results output
0 commit comments