eval(parse("""pri-6ren">
gpt4 book ai didi

julia - 如何在 Julia 中解析多行字符串?

转载 作者:行者123 更新时间:2023-12-04 14:23:28 25 4
gpt4 key购买 nike

如何解析更多行代码?

这是有效的:

julia> eval(parse("""print("O");print("K")"""))
OK

这不起作用:

julia> eval(parse("""print("N");
print("O")"""))
ERROR: ParseError("extra token after end of expression")
Stacktrace:
[1] #parse#235(::Bool, ::Function, ::String) at ./parse.jl:237
[2] parse(::String) at ./parse.jl:232

顺便说一句,如果我逐行尝试,我还有其他问题。例如:

julia> parse("""for i in 1:3""")
:($(Expr(:incomplete, "incomplete: premature end of input")))

虽然:

julia> eval(parse("""for i in 1:2
println(i)
end"""))
1
2

最佳答案

parse旨在解析单个表达式(至少这就是文档所说的:鉴于此,我实际上对您的第一个示例有效而没有抛出错误感到有点惊讶......)。

如果要解析多个表达式,则可以利用以下事实:

  • parse可以接受第二个参数 start这告诉它去哪里
    从开始解析。
  • 如果你提供这个 start 参数,那么它返回一个包含表达式的元组,以及表达式结束的位置。

  • 定义一个 parseall自己发挥作用。曾经有一个基地,但我不确定现在有没有。 编辑:仍在测试中,请参见下文
    # modified from the julia source ./test/parse.jl
    function parseall(str)
    pos = start(str)
    exs = []
    while !done(str, pos)
    ex, pos = parse(str, pos) # returns next starting point as well as expr
    ex.head == :toplevel ? append!(exs, ex.args) : push!(exs, ex) #see comments for info
    end
    if length(exs) == 0
    throw(ParseError("end of input"))
    elseif length(exs) == 1
    return exs[1]
    else
    return Expr(:block, exs...) # convert the array of expressions
    # back to a single expression
    end
    end

    关于julia - 如何在 Julia 中解析多行字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46364922/

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