funcons-intgen-0.2.0.1: src/Parsing/Syntax.hs
module Parsing.Syntax where
import Types.ConcreteSyntax
import Parsing.Mutual
import GLL.Combinators
pVarSynName :: Parser VarSynName
pVarSynName = "VAR-SYN-NAME"
<:=> VarName <$$> pVarString <** keychar ':' <**> name_lit
<||> SynName <$$> name_lit
pVarStems :: Parser [VarStem]
pVarStems = "VAR-STEMS"
<:=> multipleSepBy1 pVarString (keychar ',') <** keychar ':'
pVarStem :: Parser VarStem
pVarStem = "VAR-STEM" <:=> pVarString
pAlts :: Parser PhraseType
pAlts = "PT-ALTS" <:=> foldr1 PTUnion <$$> multipleSepBy1 pAlt (keychar '|')
pAlt :: Parser PhraseType
pAlt = "SINGLE-PT-ALT" <:=> foldr1 PTSeq <$$> multiple1 pPhraseType
pPhraseType :: Parser PhraseType
pPhraseType = "PHRASE-TYPE"
<::=> PTSynName <$$> pSynName
<||> atom_or_range <$$> atom_lit <**> optional (keychar '-' **> atom_lit)
<||> PTComplement <$$ keychar '~' <**> pPhraseType
<||> flip ($) <$$> pPhraseType <**> pPhraseTypeRest
<||> PTGroup <$$> parens (optional pAlts)
where atom_or_range a1 (Just a2) = PTRange a1 a2
atom_or_range a1 Nothing = PTAtom a1
pPhraseTypeRest :: Parser (PhraseType -> PhraseType)
pPhraseTypeRest = "REST-PHRASE-TYPE"
<::=> flip PTPostfix <$$> pPostfix
<||> flip PTNoLayout <$$ keychar '_' <**> pPhraseType