解析文件的工具

时间:2020-03-05 18:56:38  来源:igfitidea点击:

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

它具有像

>{!gDYNAMIC_3205_1215032915_810 = (clYN)}
execute>GDYNAMIC_3205_1215032915_810 = "Yes, No"
results>"Yes, No" 
execute>end 
results>"Yes, No" 

>{!gDYNAMIC_3205_1215032893_294 = (clYN)}
execute>GDYNAMIC_3205_1215032893_294 = "Yes, No"
results>"Yes, No" 
execute>end 
results>"Yes, No"

>{IF (STR(F3205_1220646638_285, F3205_1220646638_301) == "") THEN "" ELSE (\par\tab fnHeadingFormat("Depression") + CFMT(F3205_1220646638_285, "", "Have you often been bothered by feeling down, depressed or hopeless? ", "B", "\par ") + CFMT(F3205_1220646638_301, "", "Have you often been bothered by little interest or pleasure in doing things? ", "B", "\par ") ) ENDIF}
execute>call STR("No", "No")
results>"NoNo" 
execute>"NoNo" == ""
results>FALSE 
execute>if FALSE
results>FALSE 
execute>call FNHEADINGFORMAT("Depression")
execute>call CFMT("Depression", "B,2")
results>"\fs24\b Depression\b0\fs20 " 
execute>"\r\n" + "\fs24\b Depression\b0\fs20 "
results>"\r\n\fs24\b Depression\b0\fs20 " 
execute>"\r\n\fs24\b Depression\b0\fs20 " + "\r\n"
results>"\r\n\fs24\b Depression\b0\fs20 \r\n" 
results>return "\r\n\fs24\b Depression\b0\fs20 \r\n" 
execute>call CFMT("No", "", "Have you often been bothered by feeling down, depressed or hopeless? ", "B", "\par ")
results>"\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par " 
execute>"\r\n\fs24\b Depression\b0\fs20 \r\n" + "\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par "
results>"\r\n\fs24\b Depression\b0\fs20 \r\n\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par " 
execute>call CFMT("No", "", "Have you often been bothered by little interest or pleasure in doing things? ", "B", "\par ")
results>"\b Have you often been bothered by little interest or pleasure in doing things? \b0 No\par " 
execute>"\r\n\fs24\b Depression\b0\fs20 \r\n\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par " + "\b Have you often been bothered by little interest or pleasure in doing things? \b0 No\par "
results>"\r\n\fs24\b Depression\b0\fs20 \r\n\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par \b Have you often been bothered by little interest or pleasure in doing things? \b0 No\par "

我可以通过程序来仔细检查它,但是经过所有的正则表达式工作,我很难相信没有其他东西可以让我定义以类似方式解析文件的规则。我错了吗?

解决方案

回答

Antlr可以解决问题。

回答

我们可以尝试ANTLR或者lex / yacc。

回答

如果是我,我将派生上下文无关的语法,并将其插入解析器生成器(可能是Scala的组合器库)中。但是,只要记住自动机理论,该语法看起来就很容易手动解析,这不应该成为问题。

回答

使用ANTLR进行语法编写。如果我们使用的是C,那么lex / yacc是本机的。 ANTLR使用Java,Python和.NET创建本机解析器。输出看起来像一个副本。尝试询问供应商有关输入语言的规范。

回答

我想我们可以使用LEX,FLEX,CUP,ANTLR或者YACC之类的工具(或者与我们使用的任何编程语言相对应的工具。任何主流编程语言都可以使用这些工具。)结构(更准确地说,如果可以用语法表示)。但是,这些方法可能无法达到更好的效果。

回答

有一种称为Haskell的编程语言,它具有一个不错的解析库,我们可以尝试使用。 www.haskell.org和http://legacy.cs.uu.nl/daan/parsec.html了解更多详细信息

回答

如果我们使用Perl进行解析。 YACC的Perl等效项是Parse :: Yapp模块。当我翻译yacc语法以与我的Perl代码一起使用时,翻译主要是机械性的。还有一个递归下降解析器生成器,它很慢但是很强大:Parse :: RecDescent。