aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/HaddockParse.y55
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"
+}