- Parsing grouped expressions is now possible
- formatting

git-svn-id: https://svn.tlawal.org/svn/monkey@34 f6afcba9-9ef1-4bdd-9b72-7484f5705bac
This commit is contained in:
Tijani Lawal 2022-07-14 12:23:22 +00:00
parent 388700441e
commit a4b75cf9c2
3 changed files with 34 additions and 2 deletions

View File

@ -189,6 +189,6 @@ func (ie *InfixExpression) String() string {
}
// Booleans
func (b *Boolean) expression_node() {}
func (b *Boolean) expression_node() {}
func (b *Boolean) TokenLiteral() string { return b.Token.Literal }
func (b *Boolean) String() string { return b.Token.Literal}
func (b *Boolean) String() string { return b.Token.Literal }

View File

@ -100,6 +100,9 @@ func New(l_lexer *lexer.Lexer) *Parser {
l_parser.register_prefix(token.TRUE, l_parser.parse_boolean)
l_parser.register_prefix(token.FALSE, l_parser.parse_boolean)
// Grouped Expression
l_parser.register_prefix(token.LPAREN, l_parser.parse_grouped_expression)
return l_parser
}
@ -278,3 +281,12 @@ func (l_parser *Parser) parse_boolean() ast.Expression {
Value: l_parser.current_token_is(token.TRUE),
}
}
func (l_parser *Parser) parse_grouped_expression() ast.Expression{
l_parser.next_token()
expression := l_parser.parse_expression(LOWEST)
if !l_parser.expect_peek(token.RPAREN){
return nil
}
return expression
}

View File

@ -290,6 +290,26 @@ func TestOperatorPrecedenceParsing(l_test *testing.T) {
"3 < 5 == true",
"((3 < 5) == true)",
},
{
"3 < 5 == true",
"((3 < 5) == true)",
},
{
"(5 + 5) * 2",
"((5 + 5) * 2)",
},
{
"2 / (5 + 5)",
"(2 / (5 + 5))",
},
{
"-(5 + 5)",
"(-(5 + 5))",
},
{
"!(true == true)",
"(!(true == true))",
},
}
for _, tt := range tests {
l_lexer := lexer.New(tt.input)