2010-05-26 6 views
1

많은 수준과 문자가있는 텍스트 파일을 구문 분석해야합니다. 나는 그것을 파싱하는 다른 방법을 시도해 왔지만 나는 일할 것이 아무것도 없었습니다. 내가 다루고있는 텍스트 파일의 샘플을 포함 시켰습니다. 이 파일을 어떻게 파싱 할 수 있을지에 대한 제안이 있으십니까?C#으로 복잡한 텍스트 파일 구문 분석

나는 TEXTINEED와 함께 필요한 파일의 일부를 표시했습니다.

(bean name: 
     'TEXTINEED 
     context: 
     (list '/text 
      '/content/home/left-nav/text 
      '/content/home/landing-page) 
     type: 
     '/text/types/text 
     module: 
     '/modules/TEXTINEED 
     source: 
     '|moretext| 
     ((contents 
      (list (list (bean type: 
          '/directory/TEXTINEED 
          ((directives 
           (bean ((chartSize (list 600 400)) 
             (showCorners (list #f)) 
             (showColHeader (list #f)) 
             (showRowHeader (list #f))))))) 
         (bean type: 
          '/directory/TEXTINEED 
          ((directives 
           (bean ((displayName (list "MTD")) 
             (showCorners (list #f)) 
             (showColHeader (list #f)) 
             (showRowLabels (list #f)) 
             (hideDetailedLink (list #t)) 
             (showRowHeader (list #f)) 
             (chartSize (list 600 400))))))) 
         (bean type: 
          '/directory/TEXTINEED 
          ((directives 
           (bean ((displayName (list "QTD")) 
             (showCorners (list #f)) 
             (showColHeader (list #f)) 
             (showRowLabels (list #f)) 
             (hideDetailedLink (list #t)) 
             (showRowHeader (list #f)) 
             (chartSize (list 600 400)))))))) 
+0

글쎄, 이미 시도해 봤어? 그리고 정확히 무엇이 문제였습니까? 일반적인 S-Expr 구문 분석처럼 보입니다. 아마도 웹상에서 이미이 일을하는 무언가가있을 것입니다 ... – gimpf

+0

작은 따옴표로 끝나는 작은 따옴표가 무엇입니까? –

+0

이 파일을 생성 한 도구를 알고 있어야합니다. –

답변

0

파일에서 발생하는 다른 토큰에 따라 상태가 변경되는 상태 시스템 구현을 작성하는 것이 좋습니다. 필자는 상태 기반 파서가 작성하고 디버그하기가 쉽다는 것을 발견했습니다. 가장 어려운 부분은 사용하는 토큰을 정의하는 것일 수 있습니다.

2

멋진 S-Expression 파일을 우연히 발견 한 것처럼 보입니다. 또한 LISP 코드로 알려져 있습니다. 그것은 복잡 해 보이지만 파싱하기 쉽습니다. 사실을 따라갈 수있는 Lisp에 대해 많이 배울 필요가 없다면,이 중 일부는 이와 같은 파일을위한 파서를 작성합니다. 하지만 그건 너를 위해 과잉 일 것이다. :)

대신 이미 사용할 수있는 S-Expression 파서를 사용해야합니다.이 프로젝트의 코드 또는 프로젝트를 사용하여 파일을 구문 분석 할 수 있어야합니다.

lispy해야 할 일은 단지 파일을 '구문 분석'대신에 그냥 실행하는 것처럼 lisp 프로그램으로 읽는 것입니다. 따라서 다른 옵션은 파일을 C# (아마도 XML?)에서 좀 더 자연스러운 것으로 변환하기 위해 작은 lisp 프로그램을 작성하는 것입니다. 참조

여기

here는 C로 작성된 계획 인터프리터 약 lisp in C#

편집 회담 다른 포스트 (유일한 약 1000 LOC는) 당신은 read 및 관련 절차에 관심이 있습니다. 이것은 매우 간단한 전방 구문 분석을 사용하여 C 구조체의 트리에 대한 성적 판별을 사용하므로이 문제를 C#에 아무 문제없이 적용 할 수 있어야합니다.

0

ANTLR과 같은 파서 생성기를 사용하십시오. 문법에 대한 EBNF와 비슷한 설명을 취하고 원하는 언어로 파서 코드를 만듭니다.

0

OMeta #를 사용하여 C# 용 S-Expression 파서를 작성했습니다. https://github.com/databigbang/SExpression.NET

S-Expression 변종을 보면 문자열 인용 부호를 열고 따옴표를 사용하여 문자열 정의를 변경하고 마지막에 콜론이 포함 된 요소에 대한 정의를 추가하면됩니다. 사전이라고 가정).