2009-05-27 7 views
0

독점 IDE 디자인 파일에서 속성 및 코드를 추출하는 응용 프로그램을 작성하려고합니다.간단한 코드 파서를위한 설계 전략

HEADING 
{ 
    SUBHEADING1 
    { 
    PropName1 = PropVal1; 
    PropName2 = PropVal2; 
    } 

    SUBHEADING2 
    { 
    { 1 ; PropVal1 ; PropValue2 } 
    { 2 ; PropVal1 ; PropValue2 ; OnEvent1=BEGIN 
              MESSAGE('Hello, World!'); 
              { block comments are between braces } 
              //inline comments are after double-slashes 
              END; 
    PropVal3 } 
    { 1 ; PropVal1 ; PropVal2; PropVal3 } 
    } 
} 

내가 뭘하려고 오전 부제목 블록에서 내용을 추출 할 수 있습니다 : 파일 형식은 다음과 같이 보입니다. SUBHEADING2의 경우 세미콜론으로 구분 된 각 토큰을 분리합니다. 나는 괄호를 세우고 내가 현재 부제목을 가지고 있는지를 추적하는 것으로 합리적으로 좋은 성공을 거두었 다. 내가 만난 주된 문제는 코드 주석을 다루는 일이다.

이 언어는 파일 형식의 대괄호를 방해하는 블록 주석에 {}를 사용하는 경우가 있습니다. 더 재미있게 만들려면 두 줄의 인라인 주석을 고려해야하며 줄 끝까지 모든 것을 무시해야합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 다른 기사 (ANTLR, Doxygen 등)에서 논의 된 컴파일러 라이브러리 중 일부를 살펴 보았지만 이러한 특정 구문 분석 문제를 해결하기에는 과도한 것처럼 보입니다.

+0

XML 기반 구문을 사용하지 않는 이유는 무엇입니까? – xport

답변

1

결과를 사용하는 일부 코드와 함께 정규식을 사용하여 몇 시간 내에 무엇인가를 정리할 수 있어야합니다.

다음과 같은 것이 작동해야합니다. - 파일을 문자열로로드하여 프로세스를 초기화하십시오.

  • 문자열에서 각 최상위 블록을 당기고 regex 태그를 사용하여 블록 키워드와 내용을 별도로 식별합니다.
  • 블록이 발견되면
  • ,
    • 재귀 적으로이 과정에 대한 내용을 전달 키워드
    • 에 따라 결정을합니다.

이 발생한 후에는, 그 제 소호 후 제 부제목, 각 서브 블록 호를 처리한다. 블록 주석을 포함하는 하위 블록의 경우 블록의 키워드 부족으로 인해 모든 하위 블록이 주석이므로 하위 블록을 처리 할 필요가 없습니다.

+0

조언 해 주셔서 감사합니다. 그 결과 나는 정규식에 대해 더 많은 것을 배울 수있는 주도권을 잡았습니다. – polara

5

토큰 화기 및 파서를 작성하는 것이 좋습니다. 이것은 당신에게 더 많은 유연성을 줄 것이다. 토큰 화 도구는 기본적으로 소스 코드의 간단한 텍스트 단위 분해를 수행하여보다 유용한 데이터 구조로 변환합니다. 파서는 재귀를 활용하여 무엇을해야할지 파악합니다.

약관은 Google에 : http://www.codeproject.com/KB/vb/math_expression_evaluator.aspx (당신이 떨어져 당신이 원하는에 다음과 같은 예를 가지고 해킹 할 수도 있습니다)

: 토크 나이, 파서, 컴파일러 디자인,

수학 식 계산기를 문법 구문 분석에 대한 추가 정보 : http://www.codeproject.com/KB/recipes/TinyPG.aspx

이러한 기사는 거의 읽을 필요가 없지만 먼저이 기사에 대해 조금 배우고 싶을 것입니다.

1

어떤 솔루션을 선택하든 관계없이 가장 좋은 방법은 2 개의 파서/토큰 화 프로그램을 사용하는 것입니다. 하나는 그룹 문자로 {}를 사용하고 코드 블록에는 하나를 사용하는 주 파일 구조입니다.