{-# LANGUAGE OverloadedStrings #-} module Parser.Module (parser) where import AST (TopLevelStatement (FunctionDef), Program) import Parser.Util (Parser, withSourceRange, SourceRange) import Parser.Expr (expression) import Lexer (identifier, symbol) import Text.Megaparsec -- | Main parser for a single file. parser :: Parser (Program SourceRange) parser = many functionDef functionDef :: Parser (TopLevelStatement SourceRange) functionDef = withSourceRange $ FunctionDef <$> identifier <*> many identifier <* symbol "=" <*> expression <* symbol ";"