懒得看文章直接找repo的话点这里
前言
最近想到了文言文编程这个脑洞,正好又看到Haskell里面有Parsec这个包,然后就决定试一下了orz
所以打算从最简单的开始入手,也就是将有一定格式的文言文翻译成Python的代码,比如像下面这个(插入排序):
有略名 排序 其参名 数列 其文曰
凡 巡 之于 数数自 1 至 求长于 数列 之中 所得之数 是也 为
媒 者 数列 诸 巡 位之数 也
今 者 巡 减 1 也
复为之,方 今 非小于 0 与 媒 小于 数列 诸 今 位之数 乃止
数列 诸 今 加 1 所得之数 位之数 换作 数列 诸 今 位之数
今 谪 1 也
数列 诸 今 加 1 位之数 换作 媒 也
可以看到整体的样式是和Python的代码是一致的,这样的话可以减少我们写的解释器的工作量,但缺点的话,很明显,并不像自然语言。。。
一开始看上去很简单
首先我们来看看Text.ParserCombinators.Parsec这一Package,它可以将一大段文字的每一行和每一个单词提取出来建成一个二维数组,这歌其实和
parse :: String -> [[String]]
parse x = map words $ lines x
这样的一段代码差不多,不过有一个区别就是Parsec里面的parse会把每一个空格也记录起来,这样我们家可以写出这样的一个函数将输入的内容分成每一个词:
wyFile = endBy line eol
line = sepBy cell (char ' ')