megaparsec

    7热度

    2回答

    我正在使用Megaparsec处理一个小的解析器,并尝试解析算术。 -- Arithmetic expressions data Aexp = N Num | V Var | Mult Aexp Aexp | Add Aexp Aexp | Sub Aexp Aexp deriving (Show, Eq, Read)

    0热度

    2回答

    我正在为大学项目构建java的编译器,在我的项目中,我的解析器大多是StateT (Scope,SymbolTable) String m a,其中Scope是我们现在的范围(方法,类等),并且SymbolTable成立直到现在定义的符号。 我想用百万秒差距的组合程序上的解析器,为parens,braces这不是问题,我只是用mapStateT但sepBy等我开发了这一功能: mapsequenc

    3热度

    1回答

    我将使用megaparsec来解析大学项目的编程语言。不过,我搜索了一个报告多个错误的方法。 我知道与恢复,我看到this问题,但我没有找到有关错误发生在不同位置的情况。 例如在该Java代码: class A { public get() // line 3 column 10 { return x // line 5 column 22 } }

    3热度

    1回答

    我想使用Megaparsec解析Haskell中类似于此的文本。 # START SKIP def foo(a,b): c = 2*a # Foo return a + b # END SKIP ,其中# START SKIP和# END SKIP标记文本解析的块的开始和结束。 与skipBlockComment相比,我想让解析器返回开始标记和结束标记之间的界限。 这是

    7热度

    2回答

    使用百万秒差距5. 继this guide,我可以通过组合StateT和实现回溯用户状态(非定义的类型应该是显而易见/无关): type MyParser a = StateT UserState (ParsecT Dec T.Text Identity) a 如果我运行一个分析器p :: MyParser a,像这样: parsed = runParser (runStateT p init

    1热度

    1回答

    我写了一个小解析器与百万秒差距: module App (main) where import Control.Monad (void) import Text.Megaparsec import Text.Megaparsec.String import qualified Text.Megaparsec.Lexer as L sc :: Parser() sc = L.spac

    0热度

    1回答

    我有一门课程,需要我编写一个新的函数parse :: String - > Stm。 Parsec已经有一个解析函数,所以我应该导入合格的parsec,以便解析返回我的包装函数。 包装函数需要将输入字符串解析为Parsec的解析函数,并从返回的monad中解压缩结果。这是我的包装函数的代码。 如何确保在调用解析时返回包装函数。 parseString :: String -> Stm parse

    -1热度

    1回答

    我不明白什么呢的类型(例如)eol平均: eol :: (MonadParsec e s m, Token s ~ Char) => m String ,或者更好,我不明白如何使用EOL Text.Megaparsec.Text而不是Text.Megaparsec.String。 我一直在尝试使用学习如何使用Megaparsec遵循从真实世界Haskell Parsec(旧)教程(我实际上开始

    3热度

    1回答

    我正在编写一个程序来修改源代码文件。我需要解析文件(例如使用megaparsec),修改其抽象语法树AST(例如使用Uniplate),并尽可能少地改变文件(例如保留空格,注释...)来重新生成文件。 因此,AST应包含空间,例如: data Identifier = Identifier String String 其中第一字符串是标识符的名称,并且第二个是空间后。这同样适用于该语言中的任何

    0热度

    1回答

    我需要解析此语法函数声明 foo x = 1 Func "foo" (Ident "x") = 1 foo (x = 1) = 1 Func "foo" (Label "x" 1) = 1 foo x = y = 1 Func "foo" (Ident "x") = (Label "y" 1) 我写了这个解析器 module SimpleParser where import