Add range statements to golang grammar

This commit is contained in:
Max Brunsfeld 2014-06-10 14:11:25 -07:00
parent a42f498c59
commit c91c5cb730
3 changed files with 1070 additions and 743 deletions

View file

@ -83,6 +83,7 @@ namespace tree_sitter_examples {
sym("expression_statement"),
sym("return_statement"),
sym("declaration_statement"),
sym("range_statement"),
sym("if_statement") }) },
{ "return_statement", seq({
keyword("return"),
@ -90,6 +91,14 @@ namespace tree_sitter_examples {
{ "declaration_statement", choice({
sym("var_declaration"),
seq({ comma_sep(sym("var_name")), str(":="), sym("expression") }) }) },
{ "range_statement", seq({
keyword("for"),
sym("var_name"),
optional(seq({ str(","), sym("var_name") })),
str(":="),
keyword("range"),
sym("expression"),
sym("block_statement") }) },
{ "if_statement", seq({
keyword("if"),
sym("expression"),

File diff suppressed because it is too large Load diff

View file

@ -61,4 +61,26 @@ func main() {
(if_statement (call_expression (var_name))
(block_statement)
(if_statement (call_expression (var_name))
(block_statement))))))
(block_statement))))))
=============================================
parses range statements
=============================================
package main
func main() {
for k := range theMap() {
println(k)
}
for k, v := range theMap() {
println(k, v)
}
}
---
(program (package_directive (package_name))
(func_declaration (var_name) (block_statement
(range_statement (var_name) (call_expression (var_name)) (block_statement
(expression_statement (call_expression (var_name) (var_name)))))
(range_statement (var_name) (var_name) (call_expression (var_name)) (block_statement
(expression_statement (call_expression (var_name) (var_name) (var_name))))))))