diff --git a/src/ephp_parser.peg b/src/ephp_parser.peg index 7debdd55..22238686 100644 --- a/src/ephp_parser.peg +++ b/src/ephp_parser.peg @@ -868,13 +868,14 @@ var_simple <- (key '::')? '$' key ` enclosed_var <- enclosed_var_array / enclosed_var_simple ~; -enclosed_var_array <- '$' '{' key ('[' space? (array_index space?)? ']')+ '}' ` - [_Dollar,_,Key,Indexes,_] = Node, +enclosed_var_array <- ('$' '{' / '{' '$') key + ('[' space? (array_index space?)? ']')+ '}' ` + [_Dollar,Key,Indexes,_] = Node, #variable{name=Key, idx=[ get_index(I) || [_,_,I,_] <- Indexes ], line=Index} `; -enclosed_var_simple <- '$' '{' key '}' ` - [_Dollar,_,Key,_] = Node, +enclosed_var_simple <- ('$' '{' / '{' '$') key '}' ` + [_Dollar,Key,_] = Node, #variable{name=Key, line=Index} `; diff --git a/test/code/test_enclosed_var.out b/test/code/test_enclosed_var.out new file mode 100644 index 00000000..54d8a2d6 --- /dev/null +++ b/test/code/test_enclosed_var.out @@ -0,0 +1,4 @@ +hello world +hello world +hello mars +hello venus diff --git a/test/code/test_enclosed_var.php b/test/code/test_enclosed_var.php new file mode 100644 index 00000000..daca190d --- /dev/null +++ b/test/code/test_enclosed_var.php @@ -0,0 +1,11 @@ +