Regular expression help for capturing tokens from a c++ if_else function block
Mostra commenti meno recenti
I am trying to convert some c++ code matlab code and need help because trying to capture the conditions on the if_else statements. The sample code is posted below, normally it is much longer and contains many sets of the same repeating piecewise constraints with different functions to evaluate.
T[4][0] = if (x <= 2.0E2) {
t4 = x*-7.43939368315E2;
} else {
if (2.0E4 < x) {
t4 = x*-3.15202357052E2;
} else {
if ((2.0E2 < x) && (x <= 1.0E3)) {
t4 = -x*(x*-3.3581574807E-2+log(x)*4.7023733515E1+(log(x)*2.400503067842E3)/x+1.09445880410878E5/x+1.0/(x*x)*6.1158591370349E4+(x*x)*1.9946376054E-5-(x*x*x)*7.445595608E-9+(x*x*x*x)*1.243670758E-12-1.11582896139E2);
} else {
if ((1.0E3 < x) && (x <= 6.0E3)) {
t4 = -x*(x*-2.3265021934E-3+log(x)*4.8602554649E1+(log(x)*1.5974720059903E4)/x+3.623374787802E4/x+1.0/(x*x)*1.897212861710375E6+(x*x)*1.9151215358E-7-(x*x*x)*1.2237095959E-11+(x*x*x*x)*3.95116007E-16-1.62570932876E2);
} else {
if ((6.0E3 < x) && (x <= 2.0E4)) {
t4 = -x*(x*-1.6249864554E-1+log(x)*2.049900452325E3+(log(x)*6.16116287553448E6)/x-4.067298995421662E7/x+1.0/(x*x)*(5.126459124735035E23/1.40737488355328E14)+(x*x)*4.514672712E-6-(x*x*x)*9.025238189E-11+(x*x*x*x)*8.209541318E-16-1.8977498210781E4);
} else {
t4 = NAN;
}
}
}
}
};
T[5][0] = if (x <= 2.0E2) {
t5 = x*-6.99993596709E2;
} else {
if (6.0E3 < x) {
t5 = x*-2.95957496736E2;
} else {
if ((2.0E2 < x) && (x <= 1.0E3)) {
t5 = x*(x*-5.9732340052E-2+log(x)*1.344708739E1+(log(x)*6.623440520686E3)/x-1.30277758259044E5/x+1.0/(x*x)*1.93975305124744E5+(x*x)*2.359195784E-5-(x*x*x)*7.135910089E-9+(x*x*x*x)*1.0512057259E-12-2.8910827165E2);
} else {
if ((1.0E3 < x) && (x <= 6.0E3)) {
t5 = -x*(x*1.8859601673E-5+log(x)*3.6779467978E1+(log(x)*2.62795681346E2)/x+1.11227336090838E5/x-1.0/(x*x)*7.24982080986207E5+(x*x)*4.872002157E-8-(x*x*x)*9.084382373E-12+(x*x*x*x)*6.625791502E-16-4.3668943967E1);
} else {
t5 = NAN;
}
}
}
}
I have tried (and other variations)
' tokens = regexp(funcode,'if\s\((.+)\)\s\{','tokens') '
but it captures the whole segment after the first 'if (' and ends with the last ') {'
I would also like to eventually capture tokens for the expressions for 't4 = ... ' etc with each condition.
Any help would be greatly appreciated. P.S. Matlab needs to make MatlabFunction() work for piecewise symbolic functions.
Risposta accettata
Più risposte (1)
Oleg Komarov
il 12 Lug 2011
tokens = regexp(s,'if\ ([\(\)\w\ \.><=&]+)\s+{','tokens')
1 Commento
Joseph
il 12 Lug 2011
Categorie
Scopri di più su Logical in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!