2009-08-28 7 views
0

Template Toolkit과 같은 최소한의 템플릿 언어를 구현하고 싶지만 훨씬 간단합니다. 기존 구현/라이브러리를 사용하고 싶지는 않지만 무언가를 배우기를 원하기 때문에 처음부터 시작하고 필요에 맞게 그것을 이해하고 싶습니다. 최종 제품은 C에 있어야하지만 아마도 Perl에서 프로토 타입을 먼저 만들려고합니다. 처음에는 변수를 대체하는 다른 파일을 포함하여 처리하기를 원합니다. 이제는 고급 구문 분석이 필요한/elseif/else/endif-construct 인 경우 임의로 중첩 할 수 있습니다.파싱에 대한 힌트

 
<h1>[% substitute title %]</h1> 
<p> 
[% if foo %] 
foo is true 
[% elseif bar %] 
[% if baz %] 
bar and baz are true 
[% endif %] 
bar is true 
[% else %] 
<em>none<em> is true 
[% endif %] 
</p> 

내가 괜찮은 C와 약간의 펄 기술하지만, 구문 분석 전혀 지식을 가지고, 그래서도 정확히 내가 무엇을 찾고 모른다 :

여기에 의도 된 사용을 보여주는 예입니다. 그래서

알고리즘
  • 최소한의, 잘 설명/예 댓글을 달았습니다
  • 읽기 등의 알고리즘에 대한 권장, 여기에 관련 구문 분석에 대한 최소한의 소개 또는 자습서와 같은 구문 분석 처리 할 수 ​​
    • (I에 관심이있을 것 TT 소스에서별로 의미가 없음)

    TIA.

  • 답변

    0

    얼마 전에 비슷한 question에 대한 일반적인 답변을 작성했습니다. 호프 푸리는 시작 지점을 찾는 데 도움이 될 수 있습니다.

    1

    C를 사용하는 경우 (f) lex 및 yacc/bison을 시도해보십시오. 그들은 사용하기가 어렵지 않습니다.

    게다가 컴파일러의 기본에 대한 몇 가지 질문이 있습니다.

    그냥 기본 :

    첫 번째 단계는 토큰 스트림에 문자 스트림을 변환하는 것입니다.

    예를 들어 [% 및 %]는 두 개의 토큰입니다. 그러나 식별자도 토큰입니다.

    다음 단계는 문법을 감지하고 실행하는 것입니다. 구문 트리를 작성하여이 작업을 수행 할 수 있습니다.

       [if] 
          /| \ 
          / | \ 
          | Exp | 
          | | | 
          | foo | 
          |  | 
         "foo is.." elsif 
           /| \ 
           / | \ 
            | Exp | 
            | | | 
            | bar | 
            |  | 
            if  "none is true" 
           /| \ 
          / | \ 
           | Exp | 
           | | | 
           | baz | 
           |  | 
         "bar and..." empty 
    

    그런 다음 트리를 실행하십시오. 어떤 의미인지 : 각 if (else) if 노드에 대해 표현식을 평가하고 true 인 경우 true 브랜치를, false 인 경우 fase 브랜치를 실행합니다.

    +0

    예를 들어 주셔서 감사합니다. 그게 bootom-up 구문 분석 (http://en.wikipedia.org/wiki/Bottom-up_parsing)일까요? 나는 적어도 Google 물건을 할 수 있도록 개념과 용어에 익숙해 지려고 노력하고 있습니다. –

    +0

    Gamecat의 게시물에 표시된 내용은 일반적으로 AST (추상 구문 트리)라고합니다. 구문 분석 할 때 토큰 스트림은 일반적으로 먼저 구문 분석 트리로 변환 된 다음 AST로 변환됩니다. – Noldorin

    +0

    @JG : 상향식 구문 분석은 특정 유형의 구문 분석을위한 일반적인 용어입니다. 이론을 배우고 싶다면 하향식 파싱부터 시작하는 것이 가장 좋습니다 (특히 재귀 - 하강). – Noldorin

    0

    JavaCC은 Java에서 컴파일러를 작성하기위한 Java 컴파일러 컴파일러입니다. 프로그래밍 언어 또는 인터프리터를 만들고 싶다면 매우 유용한 비트의 소프트웨어.