ここにアクセスして 左の入力欄に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]* |