Deeper parsing
This commit is contained in:
parent
da4c96fbd5
commit
8e04dbf597
@ -16,6 +16,14 @@ func TestLex(t *testing.T) {
|
|||||||
"comment.hcl",
|
"comment.hcl",
|
||||||
[]int{IDENTIFIER, EQUAL, STRING, lexEOF},
|
[]int{IDENTIFIER, EQUAL, STRING, lexEOF},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"structure_basic.hcl",
|
||||||
|
[]int{
|
||||||
|
IDENTIFIER, LEFTBRACE,
|
||||||
|
IDENTIFIER, EQUAL, NUMBER,
|
||||||
|
RIGHTBRACE, lexEOF,
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"structure.hcl",
|
"structure.hcl",
|
||||||
[]int{
|
[]int{
|
||||||
|
39
parse.y
39
parse.y
@ -11,7 +11,8 @@ package hcl
|
|||||||
str string
|
str string
|
||||||
}
|
}
|
||||||
|
|
||||||
%type <obj> object
|
%type <obj> block object
|
||||||
|
%type <str> blockId
|
||||||
|
|
||||||
%token <num> NUMBER
|
%token <num> NUMBER
|
||||||
%token <str> IDENTIFIER EQUAL SEMICOLON STRING
|
%token <str> IDENTIFIER EQUAL SEMICOLON STRING
|
||||||
@ -26,9 +27,41 @@ top:
|
|||||||
}
|
}
|
||||||
|
|
||||||
object:
|
object:
|
||||||
IDENTIFIER EQUAL STRING
|
object SEMICOLON
|
||||||
{
|
{
|
||||||
$$ = map[string]interface{}{$1: $3}
|
$$ = $1
|
||||||
|
}
|
||||||
|
| IDENTIFIER EQUAL NUMBER
|
||||||
|
{
|
||||||
|
$$ = map[string]interface{}{$1: []interface{}{$3}}
|
||||||
|
}
|
||||||
|
| IDENTIFIER EQUAL STRING
|
||||||
|
{
|
||||||
|
$$ = map[string]interface{}{$1: []interface{}{$3}}
|
||||||
|
}
|
||||||
|
| block
|
||||||
|
{
|
||||||
|
$$ = $1
|
||||||
|
}
|
||||||
|
|
||||||
|
block:
|
||||||
|
blockId LEFTBRACE object RIGHTBRACE
|
||||||
|
{
|
||||||
|
$$ = map[string]interface{}{$1: []interface{}{$3}}
|
||||||
|
}
|
||||||
|
| blockId block
|
||||||
|
{
|
||||||
|
$$ = map[string]interface{}{$1: []interface{}{$2}}
|
||||||
|
}
|
||||||
|
|
||||||
|
blockId:
|
||||||
|
IDENTIFIER
|
||||||
|
{
|
||||||
|
$$ = $1
|
||||||
|
}
|
||||||
|
| STRING
|
||||||
|
{
|
||||||
|
$$ = $1
|
||||||
}
|
}
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
@ -15,7 +15,35 @@ func TestParse(t *testing.T) {
|
|||||||
{
|
{
|
||||||
"comment.hcl",
|
"comment.hcl",
|
||||||
map[string]interface{}{
|
map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": []interface{}{"bar"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"structure_basic.hcl",
|
||||||
|
map[string]interface{}{
|
||||||
|
"foo": []interface{}{
|
||||||
|
map[string]interface{}{
|
||||||
|
"value": []interface{}{7},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"structure.hcl",
|
||||||
|
map[string]interface{}{
|
||||||
|
"foo": []interface{}{
|
||||||
|
map[string]interface{}{
|
||||||
|
"bar": []interface{}{
|
||||||
|
map[string]interface{}{
|
||||||
|
"baz": []interface{}{
|
||||||
|
map[string]interface{}{
|
||||||
|
"key": []interface{}{7},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
3
test-fixtures/structure_basic.hcl
Normal file
3
test-fixtures/structure_basic.hcl
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
foo {
|
||||||
|
value = 7
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user