From fd8c3f43853eea490cb7b3f8fd2ec86635ad1589 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Tue, 9 Jan 2018 15:51:29 +0100 Subject: started working on project 10. - trying to figure out all the data types for jack ast --- projects/10/JackParser.hs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 projects/10/JackParser.hs (limited to 'projects/10/JackParser.hs') diff --git a/projects/10/JackParser.hs b/projects/10/JackParser.hs new file mode 100644 index 0000000..a6fe7b3 --- /dev/null +++ b/projects/10/JackParser.hs @@ -0,0 +1,26 @@ +-- Jack Parser, as the coursework of Project 10 of Nand2Tetris course. +-- Author: Yuchen Pei +data JClass = JClass JIdentifier [JClassVarDec] [JSubroutineDec] +data JIdentifier = JIdentifier [Char] +data JClassVarDec = JClassVarDec JClassVarScope JType JIdentifier +data JClassVarScope = JStatic | JField +data JType = JInt | JChar | JBoolean | JVoid +data JSubroutineDec = JSubroutineDec JSubroutineType JType JIdentifier [JParameter] JSubroutineBody +data JSubroutineType = JConstructor | JFunction | JMethod +data JParameter = JParameter JType JIdentifier +data JSubroutineBody = JSubroutineBody [JVarDec] [JStatement] +data JVarDec = JVarDec JType JIdentifier +data JStatement = JLetStatement | JIfStatement | JWhileStatment | JDoStatement | JReturnStatement +data JLetStatement = JLetStatment JLeftVarId JExpression +data JIfStatement = JIfStatement JExpression [JStatement] (Maybe [JStatement]) +data JWhileStatment = JWhileStatment JExpression [JStatement] +type JDoStatement = JSubroutineCall +type JReturnStatement = Maybe JExpression +data JExpression = JTerm [(JOp, JTerm)] +data JTerm = JIntConst | JStrConst | JKeywordConst | JLeftVarId | JSubroutineCall | JExpression | JUnaryOpTerm +data JLeftVarId = JIdentifier | JLeftVarId JIdentifier (Maybe JExpression) +data JSubroutineCall = JSubroutineCall Identifier [JExpression] | JSubroutineCall Identifier Identifier [JExpression] +type JOp = Char +data JUnaryOpTerm = JUnaryOpTerm JUnaryOp Term +type JUnaryOp = Char +data JKeywordConst = JTrue | JFalse | JNull | JThis -- cgit v1.2.3