gpt4 book ai didi

parsing - Parsec 解析很多问题

转载 作者:行者123 更新时间:2023-12-04 06:42:41 26 4
gpt4 key购买 nike

我需要为一种编程语言创建一个解析器。到目前为止,它已经完成了 95%,我想说,除了一个小细节。

用这种语言编写的程序具有以下结构:

outputs
inputs
expressions

要求是输出不能与输入混合。例如:
x := output of int;
y := output of in;
.....
z := input of int;
t := input of in;
.....
expressions

我可以很好地解析单个输出,但是如果我尝试使用 (many1 output) 来允许多个输出,则它不起作用,因为它试图将输入解析为输出。

我的主要解析器如下所示:
prog =
do outs <- many1 output
ins <- many1 input
exs <- expressions
eof
return (Prog outs ins exs)

我知道这看起来很容易,但我尝试了很多东西,但无法让它发挥作用。请帮忙。

最佳答案

如果您的输出规则如下所示:

output = do name <- ident
string ":= output of"
type <- ident
char ';'
return $ Out name type

并且您的输入规则看起来相同,除了“输入”之外,问题是这两个规则都以 ident 开头并且由于 parsec 不会自动回溯,它只会尝试应用 output首先,消费 ident然后当它无法匹配“输出”时失败。

要解决此问题,您只需包装 outputinputtry , IE。
outs <- many1 (try output)
ins <- many1 (try input)

关于parsing - Parsec 解析很多问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4058765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com