Tuuna Computer Science

변형된 마크다운 개발하기(1) grammar 제작 본문

Compiler

변형된 마크다운 개발하기(1) grammar 제작

GuTTe 2020. 7. 10. 01:21

[해결] 수정 계획 : 아래 grammar 실패작 곧 정상적인 grammar 들고올 예정

 

 

기존 마크다운은 #, ##, ###와 >, >>, >>> 등등의 grammar을 제공한다. 

이번에는 이러한 grammar을 제쳐두고 새로운 grammar을 제시할 생각이다. 

#,##,###와 같은 Header은 H1->{"문자열"}, H2->{"문자열"}로 변경할 것이고

>, >>와 같은 Quote는 Quote->{"인용구"}로 

Link와 Image는 Link->{"이름","링크 주소", "툴팁"}의 형태로 제공될 예정이다.

아래는 grammar에 대한 CFG이다. 

mddoc : paragraphs opt_terms
	  ;

paragraphs : /* None */
		   | paragraph
		   | paragraphs terms paragraph
		   ;

paragraph : keyword_paragraph op_rasgn '{' pcontents opt_terms '}'
		  ;

pcontents : pcontent
		  | pcontents terms pcontent
		  ;

pcontent : keyword_header_one op_rasgn '{' ptext opt_terms '}'
		 | keyword_header_two op_rasgn '{' ptext opt_terms '}'
		 ;

ptext : pstring
	  ;

pstring : lit_string 
		;

opt_terms : /* None */
		 | terms
		 ; 

terms : term 
	  | terms term 
	  ;

term : '\n'
	 | ' '
	 | '\t' 
	 ;

코드를 보면 Pcon 구조체와 Para구조체를 볼 수 있다. Pcon구조체는 H1, H2, Quote과 같은 하나의 문단안에 content를 연결리스트로 연결하는 부분이다. 

paragraph -> NEWLINE | pcontent 부분에서 NEWLINE을 만나면 연결된 Pcon구조체 리스트를 Para구조체에 대입한다. 

고민했던 사항들은 H1->{Quote->{"인용구"}} 와 같이 되어있을 경우도 고려해봤지만 리스팅빼고는 딱히 쓸일이 없을거 같아서 제외시켰다.  

그리고 아래와 같이 opt_term을 두어 입력할 문자열의 위치를 좀 더 자유롭게 선정하기로 결정했다. 

H1->{"문자열"}

H2->{
	"문자열"
}

H3->
{
	"문자열"
}

 

좀 더 수정할 건 수정해야하는 grammar이다. 

 

 

Comments