2016-11-10 1 views
1

저는 Elixir를위한 jinja2와 같은 템플릿 언어를 구현하는 초기 설계 단계에 있습니다. 필자는 렉서를 손으로 쓴 적이 있었지만, 최근에는 얼랭 (Erlang)을위한 lex 모듈을 보았습니다. 그것은 유망 해 보이지만 초기 연구가 끝나면 내 목적에 적합한 도구인지 확신 할 수 없습니다.leex는 템플릿 엔진 렉서 작성에 좋은 선택입니까?

필자의 주저는 템플리트 언어가 본질적으로 문자열 임베디드 언어이기 때문에이 경우 leex를 사용하여 tokenize를 사용하는 방법이 명확하지 않습니다. 사소한 예를 들어,이 템플릿 토큰 화 상상 :

    :이 예에서

    <p>Here is some text for inclusion in the template.</p> 
    {% for x in some_variable %} 
        The value for the variable: {{ x }}. 
    {% endfor %} 
    

    을, 나는 kewords '에 대한 '와 '는'다르게에 따라 토큰 화되어 있는지 확인해야합니다

  • 그들은 태그 안에있는 경우 : {%의 %}가 태그 안에있는 경우
  • : {{}}
  • 템플릿에 있지만 태그 안에 있으면 없습니다.

토큰 화 단계에서 두 번의 패스가 필요하거나 필자 자신의 렉서를 롤백해야 할 것처럼 보입니다.

어휘 분석, 특히 leex 나 템플릿 엔진 작성 경험이있는 사람이라면 앞으로 가장 좋은 방법에 대한 통찰력을 제공 할 수 있을까요?

답변

3

이것이 도움이되지 않는다면 미리 사과하겠습니다. 그러나 어휘 분석은 정규 표현식의 힘을 가지고 있다고 생각합니다. 따라서, 당신이하려고하는 것이 달콤한 자리에 없다고 생각합니다. RE 또는 Leex의 첫 번째 패스는 주로 소스 코드에서 문맥이없는 어휘 요소 (토큰)로 이동하여 Leex를 적절히 사용하는 것입니다.

FOR 및 IN 토큰의 서로 다른 상황에 맞는 구문을 처리하는 것이 구문 분석 및 Erlang의 Yecc를 통해 처리 될 것이라고 생각합니다. 어휘 분석 단계에서 주석을 처리 할 수는 있지만 일반적으로 Leex와 Yecc의 조합을 사용할 수도 있습니다.

+0

좋은 점은 토큰 화 단계가 아니라 구문 분석 단계에 속합니다. 해명 해줘서 고마워. 나는 네가 옳다고 생각한다. 렉서는 토큰 중 무엇을 의미하거나 세우는 지에 대해 불가지론 자이어야합니다. – suprafly