2009-11-25 4 views
0

배제하지 않으면 서 소비, M과 파서를 작성하고 난 4.01 표준과는 말한다 거기에 HTML에이 작품을 기반으로 M.난 내 자신의 놀이를위한 HTML 파서를 쓰고 있어요

을 원했고

스타일과 SCRIPT 요소 이러한 요소에 대한 데이터 모델 사용 CDATA가, CDATA 사용자 에이전트가 다른 을 처리해야하지만. 마크 업 및 엔티티는 원시 텍스트 으로 처리되어야하며 애플리케이션으로 그대로 전달되어야합니다. 문자 "< /"(종료 태그 열기 구분 기호) 의 첫 번째 문자는 요소의 내용 인 의 끝을 종료하는 것으로 처리됩니다. 유효한 문서의 경우 요소의 끝 태그 이됩니다.

나는 잠시 동안 그것에 대해 생각하고 정말 내가 할 싶어 내가 내가 도달 할 때까지 일치하는 토큰 규칙의 일종을 수행 할 내 자기 발견을 찾아이

syntax Main 
    = "<script>" Script "</script>" 
    ; 
token Script 
    = TakeWhileNot("</") // this is not valid M grammar 
    ; 

같은 것이있다 열린 꺽쇠 괄호 < 다음에 슬래시 /.

이스케이프 시퀀스가 ​​단일 문자 인 경우이 문자를 쓸 수 있으므로 문제가되지 않습니다.

token Script 
    = ScriptEscape+ 
    ; 
token ScriptEscape 
    = !"<" 
    ; 

그리고 나는 이것에 대해 올바른 길을 갈거야하지만 문제는 일종의 관련 나는 다른에 포함 된 언어가 해당하는 경우 그 확실하지, 일 것이다하지만 스크립트 언어에 대한 상관 없어 이 경우에는 단순히 머리를 건너 뛰기 만하면됩니다.

답변

0

나는 지금 완전히 명백하지 않았다 깔끔한 트릭, ...

syntax Main 
    = "<script>" Script* "</script>" 
    ; 
token Script 
    = !('<') 
    | '<' !('/') 
    ; 

을 알아 냈 그의로 변환 유효 MGrammar :

  • '<'을 가지고 있지 않거나 가지고 '<'다음에 '/'가 붙지 않음

</토큰이 발생할 때까지는 무엇이든지 소비됩니다. d를 소비하지 않고.

관련 문제