Skip to content

Commit f726ae0

Browse files
committed
document parsers with their bnf
1 parent 217426d commit f726ae0

3 files changed

Lines changed: 46 additions & 0 deletions

File tree

src/ParseExpr.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@ import ParseUtils
99
import ParseUnit
1010

1111

12+
{--
13+
<expr> = <expr> <binop> <expr>
14+
| '-' <expr>
15+
| '(' <expr> ')'
16+
| <identifier> '(' <args>? ')'
17+
| <expr> '::' <unit>
18+
| <number>
19+
| <identifier>
20+
21+
<args> = <expr> | <expr> ',' <args>
22+
23+
<binop> = [-+*/^]
24+
--}
25+
1226
combineExprSS :: Expr SS -> Expr SS -> SS
1327
combineExprSS e1 e2 = combineSS (getTag e1) (getTag e2)
1428

src/ParseProgram.hs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,32 @@ import Control.Applicative hiding (Const)
99
import ParseExpr
1010
import ParseUnit
1111

12+
{--
13+
<program> = <statement>*
14+
15+
<statement> = 'def' <identifier> '=' <expression>
16+
| 'var' <identifier> '::' <unit>
17+
| 'derived' <identifier> '=' <unit>
18+
| 'expr' <expr>
19+
| 'eq' <expr> '=' <expr>
20+
21+
<expr> = <expr> <binop> <expr>
22+
| '-' <expr>
23+
| '(' <expr> ')'
24+
| <identifier> '(' <args>? ')'
25+
| <expr> '::' <unit>
26+
| <number>
27+
| <identifier>
28+
29+
<args> = <expr> | <expr> ',' <args>
30+
31+
<binop> = [-+*/^]
32+
33+
<unit> = '[' <basePow>* ']'
34+
35+
<basePow> = <identifier> ('^' <integer>)?
36+
--}
37+
1238
program :: Parser (Program SS)
1339
program = Program <$> many statement <?> "program"
1440

src/ParseUnit.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ import qualified Text.Parsec.Token as P
77
import Control.Applicative hiding (Const)
88
import qualified Data.Maybe as Maybe
99

10+
{--
11+
<unit> = '[' <basePow>* ']'
12+
13+
<basePow> = <identifier> ('^' <integer>)?
14+
--}
15+
1016
baseOfString :: String -> SS -> BaseUnit SS
1117
baseOfString s = Maybe.fromMaybe (Derived s) (lookup s siMap)
1218
where

0 commit comments

Comments
 (0)