Problem Regular Expression to analyse text file

1 回表示 (過去 30 日間)
Sagar Talaviya
Sagar Talaviya 2018 年 1 月 20 日
コメント済み: Walter Roberson 2018 年 1 月 25 日
Hello, I want to create given structure from any text file,
Which shows Function argument type, data type, list of variables used and defined, variable data type and whether they are local, global.
here is one .txt file, which contains C code into the file.
#include "add_lib11.h"
double PI_Regler_a(double a,double b, double c, double d, double e, double f)
{
double x;
x = (d*a) + (e*b) + (f*c);
return(x);
}
So, How can I use textscan and regexp to get structure like
functioncall.name= 'PI_Regler_a'
functioncall.type= 'double'
functioncall.returnvalueexists= '1'
variables(1).name = 'a'
variables(1).dtype = 'double'
variable(1).type = 'local'
like that,.....
please help me... I need to know that how I can separate and get what I need by using regexp and inputparsing class.
  1 件のコメント
Walter Roberson
Walter Roberson 2018 年 1 月 23 日
inputParser() class is not at all suited for this problem.

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2018 年 1 月 23 日
You need to build a C parser first. regexp() is not powerful enough for that task. You can find a formal grammar up to C11 at http://www.quut.com/c/ANSI-C-grammar-y.html
You would need to enhance this to support #include and all other preprocessing . It might be easier to invoke a C preprocessor to have it emit the expanded code, if doing so would not be considered cheating. Supporting #include and #define and so on is absolutely crucial in C since just about every "word" can be #define to be something other than it appears. And you cannot possibly get types correctly without processing typedef, which are often in #include files.
You might want to look at https://www.mathworks.com/matlabcentral/fileexchange/32769-mparser which is a parser for MATLAB written partly in MATLAB that uses the ANTLR parser (calling that with a mex interface.)
Getting all of this right is a non-trivial project.
Or you could do something half-cooked that would have trouble getting types correct and would have trouble determining whether a variable is local or global.
... Did you forget comments can have things that look like code?
  3 件のコメント
Sagar Talaviya
Sagar Talaviya 2018 年 1 月 25 日
HIIII.... again do you have some idea how should I write commands to get type correct and function name. If I get that then I will have some idea to write further command.
Walter Roberson
Walter Roberson 2018 年 1 月 25 日
You need to build a parser routine, such as in yacc and lex, or in ANTLR, or re-invent such routines in MATLAB.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by