如果它的简单可能是一个递归正则表达式(这是在Perl中)。我相信用语言解析器可以更好地处理它,它可以彻底解决问题。
$str = 'some stuff F(g(x), tx, , 44, Y(hh()) , 99, b())';
$open = '\b\w+\s*';
$regex = qr~
( # 1
($open) # 2
[(]
( # 3
(?: (?> (?: (?!$open[(] | [)]) .)+)
| (?1)
)*
)
[)]
)
~xs;
print "Before: ", $str, "\n";
print "After: ", parse_func ($str), "\n";
###
sub parse_func {
my ($core) = @_;
$core =~ s/$regex/ "[$2," . (parse_func($3)) . "]" /eg;
return $core;
}
输出
Before: some stuff F(g(x), tx, , 44, Y(hh()) , 99, b())
After: some stuff [F, [g,x], tx, , 44, [Y,[hh,]] , 99, [b,]]
来源
2012-04-17 02:31:10
sln
虽然生成所请求的输出,这是不挠曲/野牛,作为问题是具体地约。 – origo 2017-02-27 06:16:25
@ user13733 - 虽然问题具体是关于flex/bison,但我发现接受的解决方案是阅读一本书。这个答案中的正则表达式和生成的输出是OP所需要的。 SO比理论讨论更像是一个解决方案板。用我发布的例子,在OP阅读这本书之后,他可能会看到他不会看到的其他实际连接。随意发布一个工作的灵活/野牛解决方案。 – sln 2017-02-27 16:41:06