2013-01-22 6 views
1

주로 작동하는 트레 텝 (treetop) 문법 파일을 작성했습니다. [b]과 같은 태그의 경우 해당 포럼에 구성된 BBCode의 해시가있는 함수로 전달하려고합니다. 굵은 글꼴이 허용되면 HTML을 반환하고 그렇지 않으면 BB 코드를 무시합니다.BBCode Treetop 파서와 스마트 태그가 닫히고 있습니까?

rule tag 
    tag:('[' [a-zA-Z]+ ']') 
    inner_tag:(
    !('[/' [a-zA-Z]+ ']') 
    (tag <ForumBB::TagNode>/.) 
)+ 
    '[/' [a-zA-Z]+ ']' 
end 

중첩 된 태그에서는 작동하지 않습니다. 예를 들어 [b][i]Bold and italics[/i][/b]은 첫 번째 닫기 태그 인 [/i]과 일치하기 때문에 올바르게 처리되지 않습니다.

네가티브 표정에서 닫는 태그를 찾는 태그를 찾으면 어떻게 만들 수 있습니까?

포럼 관리자가 특정 태그를 켜고 끄는 동적 시스템이므로 BBCode의 각 유형에 대해 모든 규칙을 작성하지 않아도됩니다.

답변

2

나는 당신의 파서가 당신의 비즈니스 로직과 아무 관계가 없어야한다고 말한다. 포럼 관리자가 태그를 켜거나 끌 수있는 경우 파서가 아닌 AST를 통과 할 때 처리해야합니다.

파서는 제공된 문법에 대한 완전한 지식과 함께 최상의 구문 트리를 작성하는 책임 만 있습니다. 이를 염두에두고 각 유효한 BBCode 태그에 대한 규칙을 만들고 구문 분석 단계 후에 제외 된 태그를 처리하는 것이 좋습니다.

파서가 [z]invalid[/z]과 같이 유효하지 않은 BBCode를 인식하면 어떻게해야할까요?

+0

해시가 아닌 태그의 경우 변환하면 [z] invalid [/ z] 그대로 그대로 출력됩니다. 아마도 다른 접근법에서 살펴보고 문법 규칙 만 동적으로 포함하는 방법을 찾아야 할 것 같습니다. 확실히 물건을 깨끗하게합니다. – Kansha

+0

문법 파일의 최악의 경우 허용되는 모든 태그에 대해 문자열을 만들고 루비 코드로 '평가'할 수 있습니다. 예쁜 것은 아니지만 할 가치가 있습니다. –