Deeper parsing
This commit is contained in:
parent
da4c96fbd5
commit
8e04dbf597
@ -16,6 +16,14 @@ func TestLex(t *testing.T) {
|
||||
"comment.hcl",
|
||||
[]int{IDENTIFIER, EQUAL, STRING, lexEOF},
|
||||
},
|
||||
{
|
||||
"structure_basic.hcl",
|
||||
[]int{
|
||||
IDENTIFIER, LEFTBRACE,
|
||||
IDENTIFIER, EQUAL, NUMBER,
|
||||
RIGHTBRACE, lexEOF,
|
||||
},
|
||||
},
|
||||
{
|
||||
"structure.hcl",
|
||||
[]int{
|
||||
|
39
parse.y
39
parse.y
@ -11,7 +11,8 @@ package hcl
|
||||
str string
|
||||
}
|
||||
|
||||
%type <obj> object
|
||||
%type <obj> block object
|
||||
%type <str> blockId
|
||||
|
||||
%token <num> NUMBER
|
||||
%token <str> IDENTIFIER EQUAL SEMICOLON STRING
|
||||
@ -26,9 +27,41 @@ top:
|
||||
}
|
||||
|
||||
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",
|
||||
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…
Reference in New Issue
Block a user