解析文件的工具

Sar*_*can 3 parsing

我正在尝试找出解析 GE Logician MEL 跟踪文件的最佳方法,以使其更易于阅读。

它有像这样的段

>{!gDYNAMIC_3205_1215032915_810 = (clYN)}
执行>GDYNAMIC_3205_1215032915_810 = "是,否"
结果>“是,否”
执行>结束
结果>“是,否”

>{!gDYNAMIC_3205_1215032893_294 = (clYN)}
执行>GDYNAMIC_3205_1215032893_294 = "是,否"
结果>“是,否”
执行>结束
结果>“是,否”

>{IF (STR(F3205_1220646638_285, F3205_1220646638_301) == "") THEN "" ELSE (\par\tab fnHeadingFormat("Depression") + CFMT(F3205_1220646638_285, "", "您是否经常被情绪低落、抑郁或绝望吗? ", "B", "\par ") + CFMT(F3205_1220646638_301, "", "您是否经常因做事缺乏兴趣或乐趣而烦恼?", "B", "\par ") ) ENDIF}
执行>调用 STR("否", "否")
结果>“否否”
执行>“否否”==“”
结果>假
执行>如果为FALSE
结果>假
执行>调用 FNHEADINGFORMAT("抑郁症")
执行>调用 CFMT("抑郁症", "B,2")
结果>“\fs24\b 抑郁症\b0\fs20 ”
执行>"\r\n" + "\fs24\b 凹陷\b0\fs20 "
结果>“\r\n\fs24\b 抑郁症\b0\fs20 ”
执行>"\r\n\fs24\b 凹陷\b0\fs20 " + "\r\n"
结果>“\r\n\fs24\b 抑郁症\b0\fs20 \r\n”
结果>返回“\r\n\fs24\b 抑郁症\b0\fs20 \r\n”
execute>call CFMT("否", "", "您是否经常被情绪低落、沮丧或绝望所困扰?", "B", "\par ")
结果>"\b 您是否经常被情绪低落、沮丧或绝望所困扰?\b0 否\par "
execute>"\r\n\fs24\b 抑郁\b0\fs20 \r\n" + "\b 您是否经常被情绪低落、抑郁或绝望所困扰?\b0 否\par "
结果>"\r\n\fs24\b 抑郁\b0\fs20 \r\n\b 您是否经常被情绪低落、抑郁或绝望所困扰?\b0 否\par "
execute>call CFMT("否", "", "你是否经常因为做事缺乏兴趣或乐趣而烦恼?", "B", "\par ")
results>"\b 您是否经常因做事缺乏兴趣或乐趣而烦恼?\b0 否\par "
execute>"\r\n\fs24\b 抑郁\b0\fs20 \r\n\b 您是否经常被情绪低落、沮丧或绝望所困扰? \b0 否\par " + "\b 您是否经常被困扰是因为对做事缺乏兴趣或乐趣? \b0 否\par "
results>"\r\n\fs24\b 抑郁\b0\fs20 \r\n\b 您是否经常被情绪低落、沮丧或绝望所困扰? \b0 否\par \b 您是否经常被兴趣不大所困扰或者做事的乐趣? \b0 否\par "

我可能会在程序上卑躬屈膝,但在我使用过所有正则表达式之后,我发现很难相信没有什么可以让我定义以类似方式解析文件的规则。我错了吗?

nim*_*ish 5

使用 ANTLR 创建语法。如果您使用 C,则 lex/yacc 是原生的。ANTLR 使用 Java、Python 和 .NET 创建本机解析器。你的输出看起来像一个repl;尝试向供应商询问输入语言的规范。