view m-toolbox/classes/@LTPDAworkbench/parse.m @ 0:f0afece42f48
Import.
author |
Daniele Nicolodi <nicolodi@science.unitn.it> |
date |
Wed, 23 Nov 2011 19:22:13 +0100 (2011-11-23) |
parents |
|
children |
|
line source
% PARSE an LTPDA command
%
% Try to parse out:
% output vars
% input vars
% method name
% plists
% comment at end of line
%
% $Id: parse.m,v 1.2 2010/08/06 19:10:49 ingo Exp $
%
function out = parse(cmd)
cmd = strtrim(cmd);
% get comment
st = regexp(cmd, '%', 'split');
if numel(st)>1
cmt = st{2};
else
cmt = '';
end
% get method
str = st{1};
mtdend = length(str);
for kk=1:length(str)
if str(kk) == '('
mtdend = kk-1;
break;
end
end
mtdstart = 1;
for kk=1:mtdend
if str(kk) == '='
mtdstart = kk+1;
break;
end
end
method = strtrim(regexp(str(mtdstart:mtdend), '\w*', 'match'));
method = method{1};
% get output
output = '';
for kk=1:mtdstart
if str(kk) == '='
output = str(1:kk-1);
break;
end
end
output = strrep(output, '[', '');
output = strrep(output, ']', '');
if ~isempty(output)
outvars = regexp(output, ',*\s*', 'split');
else
outvars = {};
end
pls = {};
pl = '';
rest = strrep(cmd, pl, '');
plstart = regexp(rest, 'plist\(', 'start');
while ~isempty(plstart)
% look for the opening (
for kk=plstart(1):length(rest)
if rest(kk) == '('
plstart = kk;
break
end
end
% now look for the ending ) for this plist
nexp = 1;
kk=plstart+1;
while nexp~=0
if rest(kk) == '('
nexp = nexp + 1;
elseif rest(kk) == ')'
nexp = nexp - 1;
end
kk=kk+1;
end
plend = kk-1;
pl = ['plist' rest(plstart:plend)];
rest = strrep(rest, pl, '');
plstart = regexp(rest, 'plist\(', 'start');
pls = [pls {pl}];
end
% input vars
invars = regexp(rest, '\((.*)\)', 'tokens');
if ~isempty(invars)
invars = regexp(invars{1}, '\s*,\s*', 'split');
invars = invars{1};
for kk=1:numel(invars)
% remove leading [ and trailing ]
iv = strtrim(invars{kk});
if ~isempty(iv)
if invars{kk}(1) == '[' && invars{kk}(end) == ']'
invars{kk} = invars{kk}(2:end-1);
end
else
invars{kk} = iv;
end
end
end
out.outvars = strtrim(outvars(cellfun(@(x) ~isempty(x),outvars)));
out.method = strtrim(method);
out.invars = strtrim(invars(cellfun(@(x) ~isempty(x),invars)));
out.pls = strtrim(pls(cellfun(@(x) ~isempty(x),pls)));
out.comment = strtrim(cmt);
end