diff options
-rw-r--r-- | src/HaddockParse.y | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/HaddockParse.y b/src/HaddockParse.y new file mode 100644 index 00000000..2402452c --- /dev/null +++ b/src/HaddockParse.y @@ -0,0 +1,55 @@ +{ +module HaddockParse (parseParas, parseString) where + +import HaddockLex +import HaddockTypes +} + +%tokentype { Token } + +%token SQUO { TokSpecial '\'' } + DQUO { TokSpecial '\"' } + '/' { TokSpecial '/' } + '[' { TokSpecial '[' } + ']' { TokSpecial ']' } + '*' { TokBullet } + '(n)' { TokNumber } + PARA { TokPara } + STRING { TokString $$ } + +%name parseParas doc +%name parseString seq + +%% + +doc :: { ParsedDoc } + : apara PARA doc { docAppend $1 $3 } + | apara { $1 } + +apara :: { ParsedDoc } + : ulpara { DocUnorderedList [$1] } + | olpara { DocOrderedList [$1] } + | para { $1 } + +ulpara :: { ParsedDoc } + : '*' para { $2 } + +olpara :: { ParsedDoc } + : '(n)' para { $2 } + +para : seq { docParagraph $1 } + +seq :: { ParsedDoc } + : elem seq { DocAppend $1 $2 } + | elem { $1 } + +elem :: { ParsedDoc } + : STRING { DocString $1 } + | '/' STRING '/' { DocEmphasis (DocString $2) } + | SQUO STRING SQUO { DocIdentifier $2 } + | DQUO STRING DQUO { DocModule $2 } + | '[' seq ']' { DocMonospaced $2 } + +{ +happyError = error "Parse error in doc string" +} |