diff options
| author | Bobby <[email protected]> | 2023-11-17 21:19:14 +0000 |
|---|---|---|
| committer | Bobby <[email protected]> | 2023-11-17 21:19:14 +0000 |
| commit | b7d832da734647049f28c6994292d77b6e2c60eb (patch) | |
| tree | aae17c267e6079b597538fe464df224013403872 /parser/parser.go | |
| parent | 195c3672d249690c8272ad24dc18239f34a47bea (diff) | |
| download | mana-b7d832da734647049f28c6994292d77b6e2c60eb.tar.xz mana-b7d832da734647049f28c6994292d77b6e2c60eb.zip | |
added parsing boolean expressions
Diffstat (limited to 'parser/parser.go')
| -rw-r--r-- | parser/parser.go | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/parser/parser.go b/parser/parser.go index a2ea590..310acee 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -65,6 +65,8 @@ func New(l *lexer.Lexer) *Parser { p.registerPrefix(tokens.INT, p.parseIntegerLiteral) p.registerPrefix(tokens.BANG, p.parsePrefixExpression) p.registerPrefix(tokens.MINUS, p.parsePrefixExpression) + p.registerPrefix(tokens.TRUE, p.parseBoolean) + p.registerPrefix(tokens.FALSE, p.parseBoolean) // Initialize the infix parse functions. p.infixParseFns = make(map[tokens.TokenType]infixParseFn) @@ -137,9 +139,14 @@ func (p *Parser) parseIdentifier() ast.Expression { return &ast.Identifier{Token: p.curToken, Value: p.curToken.Literal} } +// parseBoolean parses a boolean. +func (p *Parser) parseBoolean() ast.Expression { + return &ast.Boolean{Token: p.curToken, Value: p.curTokenIs(tokens.TRUE)} +} + // parseIntegerLiteral parses an integer literal. func (p *Parser) parseIntegerLiteral() ast.Expression { - defer untrace(trace("parseIntegerLiteral")) + // defer untrace(trace("parseIntegerLiteral")) var lit *ast.IntegerLiteral = &ast.IntegerLiteral{Token: p.curToken} @@ -197,7 +204,7 @@ func (p *Parser) parseReturnStatement() *ast.ReturnStatement { // parseExpressionStatement parses an expression statement. func (p *Parser) parseExpressionStatement() *ast.ExpressionStatement { - defer untrace(trace("parseExpressionStatement")) + // defer untrace(trace("parseExpressionStatement")) var stmt *ast.ExpressionStatement = &ast.ExpressionStatement{Token: p.curToken} @@ -219,7 +226,7 @@ func (p *Parser) noPrefixParseFnError(t tokens.TokenType) { // parseExpression parses an expression. func (p *Parser) parseExpression(precedence int) ast.Expression { - defer untrace(trace("parseExpression")) + // defer untrace(trace("parseExpression")) prefix := p.prefixParseFns[p.curToken.Type] @@ -248,7 +255,7 @@ func (p *Parser) parseExpression(precedence int) ast.Expression { // parsePrefixExpression parses a prefix expression. func (p *Parser) parsePrefixExpression() ast.Expression { - defer untrace(trace("parsePrefixExpression")) + // defer untrace(trace("parsePrefixExpression")) var expression *ast.PrefixExpression = &ast.PrefixExpression{ Token: p.curToken, @@ -264,7 +271,7 @@ func (p *Parser) parsePrefixExpression() ast.Expression { // parseInfixExpression parses an infix expression. func (p *Parser) parseInfixExpression(left ast.Expression) ast.Expression { - defer untrace(trace("parseInfixExpression")) + // defer untrace(trace("parseInfixExpression")) expression := &ast.InfixExpression{ Token: p.curToken, |
