如果它的簡單可能是一個遞歸正則表達式(這是在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