Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class
- {
- New(fileName)
- {
- .tokenizing = Tokenizing(fileName)
- .space = ""
- .result = ""
- }
- addSpace()
- {
- .space $= " "
- }
- subSpace()
- {
- .space = .space.Substr(4)
- }
- writeClass()
- {
- .tokenizing.Advance()
- .result $= "\n" $ .space $ "<class>"
- .addSpace()
- .writeTag("class","keyword")
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "identifier")
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "symbol")// write {
- .tokenizing.Advance()
- while(.tokenizer.Token() is "static" or .tokenizer.Token() is "field"){
- .writeClassVarDec()//ToDo
- .tokenizing.Advance()
- }
- while(.tokenizer.Token() is "constructor"
- or .tokenizer.Token() is "function"
- or.tokenizer.Token() is "method"){
- .writeSubRoutine()//ToDo
- .tokenizing.Advance()
- }
- .writeTag(.tokenizer.Token(), "symbol")// write }
- .subSpace()
- .result $= "\n" $ .space $ "</class>"
- }
- writeClassVarDec()
- {
- .result $= "\n" $ .space $ "<classVarDec>"
- .addSpace()
- .writeTag(.tokenizer.Token(),"keyword")// var
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"type")
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .tokenizing.Advance()
- while(.tokenizer.Token() is "," )
- {
- .writeTag(.tokenizer.Token(),"symbol")
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .tokenizing.Advance()
- }
- .writeTag(.tokenizer.Token(),"symbol") // write ;
- .subSpace()
- .result $= "\n" $ .space $ "</classVarDec>"
- }
- writeTag(terminal,type)
- {
- .result $= "\n" $ .space $ "<" $ type $ ">" $ terminal $ "</" $ type $ ">"
- }
- writeSubRoutine()
- {
- .result $= "\n" $ .space $ "<subroutineDec>"
- .addSpace()
- .writeTag(.tokenizer.Token(),"keyword")//ect. method
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"keyword")//ect. void,int
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .writeTag(.tokenizer.Token(),"symbol") // write (
- .writeParameterList()
- .writeTag(.tokenizer.Token(),"symbol") // write )
- .writeSubroutineBody()
- .subSpace()
- .result $= "\n" $ .space $ "</subroutineDec>"
- }
- writeParameterList()
- {
- .result $= "\n" $ .space $ "<parameterList>"
- .addSpace()
- .tokenizing.Advance()
- if(.tokenizer.Token() isnt ")")
- {
- .writeTag(.tokenizer.Token(),"keyword")//type
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .tokenizing.Advance()
- while(.tokenizer.Token() is "," )
- {
- .writeTag(.tokenizer.Token(),"symbol")
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"keyword")//type
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .tokenizing.Advance()
- }
- }
- .subSpace()
- .result $= "\n" $ .space $ "</parameterList>"
- }
- writeSubroutineBody()
- {
- .result $= "\n" $ .space $ "<subroutineBody>"
- .addSpace()
- .writeTag(.tokenizer.Token(), "symbol")//write {
- .tokenizing.Advance()
- while(.tokenizer.Token() is "var" )
- {
- .writeVarDec()
- .tokenizing.Advance()
- }
- .writeStatements()
- .writeTag(.tokenizer.Token(), "symbol")//write }
- .subSpace()
- .result $= "\n" $ .space $ "</subroutineBody>"
- }
- writeVarDec()
- {
- .result $= "\n" $ .space $ "<varDec>"
- .addSpace()
- .writeTag(.tokenizer.Token(),"keyword")//var
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"keyword")//type
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .tokenizing.Advance()
- while(.tokenizer.Token() is ",")
- {
- .writeTag(.tokenizer.Token(), "symbol")//write ,
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"keyword")//type
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .tokenizing.Advance()
- }
- .writeTag(.tokenizer.Token(), "symbol")//write ;
- .subSpace()
- .result $= "\n" $ .space $ "</varDec>"
- }
- .writeStatements()
- {
- .result $= "\n" $ .space $ "<statements>"
- .addSpace()
- while(.isKeyword(.tokenizer.Token()))
- {
- switch .tokenizer.Token()
- {
- case "if"
- .writeIf()
- .tokenizing.Advance()
- case "let"
- .writeLet()
- .tokenizing.Advance()
- case "while"
- .writeWhile()
- .tokenizing.Advance()
- case "do"
- .writeDo()
- .tokenizing.Advance()
- case "return"
- .writeReturn()
- .tokenizing.Advance()
- }
- }
- .subSpace()
- .result $= "\n" $ .space $ "</statements>"
- }
- writeLet()
- {
- .result $= "\n" $ .space $ "<letStatement>"
- .addSpace()
- .writeTag(.tokenizer.Token(),"keyword")//let
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(),"identifier")
- .tokenizing.Advance()
- if .tokenizer.Token() is "["
- {
- .writeTag(.tokenizer.Token(), "symbol")//write [
- .tokenizing.Advance()
- .writeExpression()//ToDo
- .writeTag(.tokenizer.Token(), "symbol")//write ]
- .tokenizing.Advance()
- }
- .writeTag(.tokenizer.Token(), "symbol")//write =
- .tokenizing.Advance()
- .writeExpression()
- .writeTag(.tokenizer.Token(), "symbol")//write ;
- .subSpace()
- .result $= "\n" $ .space $ "</letStatement>"
- }
- writeIf()
- {
- .result $= "\n" $ .space $ "<ifStatement>"
- .addSpace()
- .writeTag(.tokenizer.Token(),"keyword")//if
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "symbol")//write (
- .tokenizing.Advance()
- .writeExpression()
- .writeTag(.tokenizer.Token(), "symbol")//write )
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "symbol")//write {
- .tokenizing.Advance()
- .writeStatements()
- .writeTag(.tokenizer.Token(), "symbol")//write }
- .tokenizing.Advance()
- if(.tokenizer.Token() is "else")
- {
- .writeTag(.tokenizer.Token(),"keyword")//else
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "symbol")//write {
- .tokenizing.Advance()
- .writeStatements()
- .writeTag(.tokenizer.Token(), "symbol")//write }
- .tokenizing.Advance()
- }
- .subSpace()
- .result $= "\n" $ .space $ "</ifStatement>"
- }
- writeWhile()
- {
- .result $= "\n" $ .space $ "<whileStatement>"
- .addSpace()
- .writeTag(.tokenizer.Token(),"keyword")//while
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "symbol")//write (
- .tokenizing.Advance()
- .writeExpression()
- .writeTag(.tokenizer.Token(), "symbol")//write )
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "symbol")//write {
- .tokenizing.Advance()
- .writeStatements()
- .writeTag(.tokenizer.Token(), "symbol")//write }
- .subSpace()
- .result $= "\n" $ .space $ "</whileStatement>"
- }
- writeDo()
- {
- .result $= "\n" $ .space $ "<doStatement>"
- .addSpace()
- .writeTag(.tokenizer.Token(),"keyword")//do
- .tokenizing.Advance()
- .writeTag(.tokenizer.Token(), "symbol")//write {
- .tokenizing.Advance()
- .writeStatements()
- .subSpace()
- .result $= "\n" $ .space $ "</doStatement>"
- }
- isKeyword(str)
- {
- keywords = #["let","if","do","while","return"]
- for key in keywords
- if str is key
- return true
- return false
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement