diff 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
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/@LTPDAworkbench/parse.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,112 @@
+% 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