mirror of
https://github.com/hazemKrimi/jack-compiler.git
synced 2026-05-01 17:48:57 +00:00
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package parser
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/hazemKrimi/jack-compiler/internal/tokenizer"
|
|
)
|
|
|
|
func ParseTokens(tokens []tokenizer.Token) string {
|
|
var output strings.Builder
|
|
|
|
output.WriteString("<tokens>\n")
|
|
|
|
for _, token := range tokens {
|
|
switch token.Type {
|
|
case tokenizer.SYMBOL:
|
|
var value string
|
|
|
|
switch token.Value {
|
|
case "<":
|
|
value = "<"
|
|
case ">":
|
|
value = ">"
|
|
case "&":
|
|
value = "&"
|
|
default:
|
|
value = token.Value
|
|
}
|
|
|
|
output.WriteString("<symbol> " + value + " </symbol>\n")
|
|
case tokenizer.KEYWORD:
|
|
output.WriteString("<keyword> " + token.Value + " </keyword>\n")
|
|
case tokenizer.IDENTIFIER:
|
|
output.WriteString("<identifier> " + token.Value + " </identifier>\n")
|
|
case tokenizer.INT_CONST:
|
|
output.WriteString("<integerConstant> " + token.Value + " </integerConstant>\n")
|
|
case tokenizer.STR_CONST:
|
|
output.WriteString("<stringConstant> " + token.Value + " </stringConstant>\n")
|
|
}
|
|
}
|
|
|
|
output.WriteString("</tokens>\n")
|
|
|
|
return output.String()
|
|
}
|