1
1
mirror of https://github.com/github/semantic.git synced 2024-11-23 08:27:56 +03:00

Label compound and assignment parsers and use infix chainl1.

This commit is contained in:
Patrick Thomson 2019-06-04 11:34:49 -04:00
parent e9b0c4548f
commit 01a4bd2ed4

View File

@ -47,7 +47,7 @@ core :: (TokenParsing m, Monad m) => m Core
core = expr
expr :: (TokenParsing m, Monad m) => m Core
expr = chainl1 atom go where
expr = atom `chainl1` go where
go = choice [ (:.) <$ dot
, (:$) <$ notFollowedBy dot
]
@ -64,7 +64,7 @@ atom = choice
]
comp :: (TokenParsing m, Monad m) => m Core
comp = braces (sconcat <$> sepEndByNonEmpty expr semi)
comp = braces (sconcat <$> sepEndByNonEmpty expr semi) <?> "compound statement"
ifthenelse :: (TokenParsing m, Monad m) => m Core
ifthenelse = If
@ -74,7 +74,7 @@ ifthenelse = If
<?> "if-then-else statement"
assign :: (TokenParsing m, Monad m) => m Core
assign = (:=) <$> try (lvalue <* symbolic '=') <*> core
assign = (:=) <$> try (lvalue <* symbolic '=') <*> core <?> "assignment"
edge :: (TokenParsing m, Monad m) => m Core
edge = kw <*> expr where kw = choice [ Edge Lexical <$ reserved "lexical"