packages feed

hyperscript-0.1.0.0: src/Hyperscript/Parser.hs

{-# LANGUAGE OverloadedStrings #-}

module Hyperscript.Parser where

import Data.Text (Text)
import Data.Void (Void)
import Text.Megaparsec (Parsec)
import qualified Text.Megaparsec.Char as C
import qualified Text.Megaparsec.Char.Lexer as L

data Error = Error deriving (Eq, Ord)

type Parser = Parsec Void Text

data HsLexemes
  = PLUS
  | MINUS
  | MULTIPLY
  | DIVIDE
  | PERIOD
  | ELLIPSIS
  | BACKSLASH
  | COLON
  | PERCENT
  | PIPE
  | EXCLAMATION
  | QUESTION
  | POUND
  | AMPERSAND
  | DOLLAR
  | SEMI
  | COMMA
  | L_PAREN
  | R_PAREN
  | L_ANG
  | R_ANG
  | LTE_ANG
  | GTE_ANG
  | EQ_
  | EQQ
  | NEQ
  | NEQQ
  | L_BRACE
  | R_BRACE
  | L_BRACKET
  | R_BRACKET
  | EQUALS
  deriving (Eq, Show)

space :: Parser ()
space = L.space C.space1 (L.skipLineComment "--") (L.skipBlockComment "{-" "-}")

symbol = L.symbol space

plus = do
  symbol "+"
  pure PLUS

minus = do
  symbol "-"
  pure MINUS

multiply = do
  symbol "*"
  pure MULTIPLY

divide = do
  symbol "/"
  pure DIVIDE

period = do
  symbol "."
  pure PERIOD

ellipsis = do
  symbol ".."
  pure ELLIPSIS

backslash = do
  symbol "\\"
  pure BACKSLASH

colon = do
  symbol ":"
  pure COLON

percent = do
  symbol "%"
  pure PERCENT

pipe = do
  symbol "|"
  pure PIPE

exclamation = do
  symbol "!"
  pure EXCLAMATION

question = do
  symbol "?"
  pure QUESTION

pound = do
  symbol "#"
  pure POUND

ampersand = do
  symbol "&"
  pure AMPERSAND

dollar = do
  symbol "$"
  pure DOLLAR

semi = do
  symbol ";"
  pure SEMI

comma = do
  symbol ","
  pure COMMA

lParen = do
  symbol "("
  pure L_PAREN

rParen = do
  symbol ")"
  pure R_PAREN

lAng = do
  symbol "<"
  pure L_ANG

rAng = do
  symbol ">"
  pure R_ANG

lteAng = do
  symbol "<="
  pure LTE_ANG

gteAng = do
  symbol ">="
  pure GTE_ANG

eq = do
  symbol "=="
  pure EQ_

eqq = do
  symbol "==="
  pure EQQ

neq = do
  symbol "!="
  pure NEQ

neqq = do
  symbol "!=="
  pure NEQQ

lBrace = do
  symbol "{"
  pure L_BRACE

rBrace = do
  symbol "}"
  pure R_BRACE

lBracket = do
  symbol "["
  pure L_BRACKET

rBracket = do
  symbol "]"
  pure R_BRACKET

equals = do
  symbol "="
  pure EQUALS