2008-09-16 7 views
2

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 " 

내가 절차 적으로 그 일을 통해 애걸 수 있지만 내가 함께 작업 한 모든 regexps '에 후, 나는 아무것도 그것을 믿기 어려울 거기서 비슷한 방식으로 파일을 파싱하기위한 규칙을 정의 할 것입니다. 내가 잘못?

답변

4

ANTLR을 사용하여 문법을 작성하십시오. C를 사용하고 있다면, lex/yacc는 기본입니다. ANTLR은 Java, Python 및 .NET에서 원시 파서를 작성합니다. 출력은 repl과 같습니다. 입력 언어에 대한 사양을 공급 업체에 문의하십시오.

+0

감사합니다. 전에 Antlr을 만나지 않았습니다. 나는 lex와 yacc에 대해 들어 봤지만, 사용하는 것이 더 좋은 것이 있는지는 몰랐다. – SarekOfVulcan

1

ANTLR 또는 lex/yacc를 시도 할 수 있습니다.

1

저라면, 문맥없는 문법을 파생시켜 파서 생성기, 아마도 스칼라의 연결자 라이브러리에 연결합니다. 그러나,이 문법은 합리적으로 손으로 구문 분석하기 쉽고, automata 이론을 염두에 두어야하며 문제가되어서는 안됩니다.

1

LEX, FLEX, CUP, ANTLR 또는 YACC (또는 사용중인 프로그래밍 언어에 해당하는 도구)와 같은 도구를 사용할 수 있다고 상상합니다. 모든 주류 프로그래밍 언어는 파일을 구문 분석 할 수 있습니다. 그들은 특정한 구조를 가지고있다. [더 정확하게 말하자면, 문법으로 표현 될 수 있다면]. 그러나 이들은 더 미세한 포인트를 위해 작동하지 않을 수도 있습니다.

2

파싱에 Perl을 사용하는 경우. YACC에 해당하는 Perl은 the Parse::Yapp 모듈입니다. 필자가 Perl 코드와 함께 사용하기 위해 yacc 문법을 번역했을 때, 번역은 주로 정비공이었다. 저속이지만 강력한 재귀 파서 생성기도 있습니다 : Parse::RecDescent.

관련 문제