Changes:
- 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:
parent
388700441e
commit
a4b75cf9c2
@ -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.TRUE, l_parser.parse_boolean)
|
||||||
l_parser.register_prefix(token.FALSE, 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
|
return l_parser
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,3 +281,12 @@ func (l_parser *Parser) parse_boolean() ast.Expression {
|
|||||||
Value: l_parser.current_token_is(token.TRUE),
|
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
|
||||||
|
}
|
||||||
|
@ -290,6 +290,26 @@ func TestOperatorPrecedenceParsing(l_test *testing.T) {
|
|||||||
"3 < 5 == true",
|
"3 < 5 == true",
|
||||||
"((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 {
|
for _, tt := range tests {
|
||||||
l_lexer := lexer.New(tt.input)
|
l_lexer := lexer.New(tt.input)
|
||||||
|
Loading…
Reference in New Issue
Block a user