我正在尝试找出解析 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 "
我可能会在程序上卑躬屈膝,但在我使用过所有正则表达式之后,我发现很难相信没有什么可以让我定义以类似方式解析文件的规则。我错了吗?
使用 ANTLR 创建语法。如果您使用 C,则 lex/yacc 是原生的。ANTLR 使用 Java、Python 和 .NET 创建本机解析器。你的输出看起来像一个repl;尝试向供应商询问输入语言的规范。
归档时间: |
|
查看次数: |
552 次 |
最近记录: |