merge comments parser into Utils.SteParser.Lex
Dependencies
- [2]
HQ2ZYTX5add comment lexing and remove references stuff - [3]
6XMVEBZAadd simple stuff (e.g. haskell basics) - [4]
GMGXNJEPadd back more stuff from yanais - [5]
JDF4JUMSsome attempts at abstract syntax
Change contents
- file deletion: Comments.hs
module GardGround.Utils.SteParser.Comments (lexeComments,) whereimport qualified Data.HashMap.Strict as Himport GardGround.Utils.SteParser.Lex (HandleTree(..), Parser', eats, skipWhiteSpace, tryOne)data LevelDelta = LevelIncr | LevelDecrlvladj :: LevelDelta -> Integer -> Integerlvladj LevelDecr lvl = lvl - 1lvladj LevelIncr lvl = lvl + 1lexeCommentsTreeInit :: HandleTree LevelDeltalexeCommentsTreeInit = HandleTree (H.fromList l1) Nothingwherel1 = [('(' {- ) -}, HandleTree (H.fromList l2) Nothing)]l2 = [('*', Htleaf LevelIncr)]lexeCommentsTree :: HandleTree LevelDeltalexeCommentsTree = HandleTree (H.fromList l1) Nothingwhere-- (* ... comment start; *) ... comment endl1 = [('(' {- ) -}, HandleTree (H.fromList l2) Nothing),('*', HandleTree (H.fromList l3) Nothing)]l2 = [('*', Htleaf LevelIncr)]l3 = [({- ( -} ')', Htleaf LevelDecr)]lexeComments :: Integer -> Parser' e ()lexeComments (-1) = error "lexeComments invalid index"lexeComments lvl = do(if lvl <= 0 then skipWhiteSpace else pure ())fi <- eats (if lvl <= 0 then lexeCommentsTreeInit else lexeCommentsTree)case fi ofJust ld -> lexeComments $ lvladj ld lvl-- we either can abort searching for comment contents (lvl == 0)-- or we skip over a single character and continueNothing -> if lvl <= 0 then pure () else tryOne (\_ -> Just ()) >> lexeComments lvl - edit in core/lib/GardGround/Utils/SteParser/Lex.hs at line 30
-- concrete parsersskipComments, - edit in core/lib/GardGround/Utils/SteParser/Lex.hs at line 243[3.10703]
-- | usually called as `skipComments 0`, skips over comments delimited by `(*` and `*)`skipComments :: Integer -> Parser' e ()skipComments (-1) = error "lexeComments invalid index"skipComments lvl = do(if lvl <= 0 then skipWhiteSpace else pure ())fi <- eats (if lvl <= 0 then lexeCommentsTreeInit else lexeCommentsTree)case fi ofJust ld -> skipComments $ lvl + ld-- we either can abort searching for comment contents (lvl == 0)-- or we skip over a single character and continueNothing -> if lvl <= 0 then pure () else tryOne (\_ -> Just ()) >> skipComments lvlwherelexeCommentsTreeInit :: HandleTree IntegerlexeCommentsTreeInit = HandleTree (H.fromList l1) Nothingwherel1 = [('(' {- ) -}, HandleTree (H.fromList l2) Nothing)]l2 = [('*', Htleaf 1)]lexeCommentsTree :: HandleTree IntegerlexeCommentsTree = HandleTree (H.fromList l1) Nothingwhere-- (* ... comment start; *) ... comment endl1 = [('(' {- ) -}, HandleTree (H.fromList l2) Nothing),('*', HandleTree (H.fromList l3) Nothing)]l2 = [('*', Htleaf 1)]l3 = [({- ( -} ')', Htleaf (-1))] - edit in core/gardground-core.cabal at line 24
GardGround.Utils.SteParser.Comments