ここにアクセスして 左の入力欄にpegの内容をコピペすれば動きます。
スライド:何となく勉強した気分になれるパーサ入門
上記スライドに感謝。
ここにアクセスして 左の入力欄にpegの内容をコピペすれば動きます。
スライド:何となく勉強した気分になれるパーサ入門
上記スライドに感謝。
| start = doc | |
| doc = block:block+ { | |
| return block; | |
| } | |
| block = list / line / code / heading / blankline / sentence | |
| list = l:(whitespace "* " chars blankline?)+ { | |
| return { | |
| type:"list", | |
| list: l.map(function(list){return list[2];}) | |
| }; | |
| } | |
| line = "---" "-"* blankline? {return {type:"line"}} | |
| //link = ! {false} | |
| //image = ! {false} | |
| //quotation = ! {false} | |
| heading = prefix:"#"+ " " text:text { | |
| return { | |
| type:"heading", | |
| text:text | |
| } | |
| } | |
| sentence = text:text { | |
| return {type:"sentence",text:text} | |
| } | |
| code = "```" lang:chars? text:code_content "```" blankline? { | |
| return { | |
| type:"code", | |
| lang:lang||"", | |
| text:text.trim() | |
| }; | |
| } | |
| text = t:chars blankline? { | |
| return t; | |
| } | |
| code_content= | |
| $(nobackchars "`" code_content) | |
| / $(nobackchars "``" code_content) | |
| / $nobackchars | |
| blankline = [\n] { return {type:"blank"}; } | |
| chars = $[^\n]+ | |
| nobackchars = $[^`]+ | |
| whitespace=[ \t\n\r]* |