gpt4 book ai didi

f# - fslex - 如何在两个 token 集之间切换?

转载 作者:行者123 更新时间:2023-12-05 01:04:38 26 4
gpt4 key购买 nike

我正在尝试使用 fslex 编写一个小型 DSL 解析器和 fsyacc .输入由需要不同词法规则的两种不同语言的交错块组成。我怎么写我的fslex文件来支持?

(我想类似的情况是如何为 c 语言定义一个 fslex 文件,但支持内联汇编,这需要不同的词法分析规则?)

我目前拥有的是这样的:

rule tokenize = parse
| "core" { core lexbuf }
...

and core = parse
| ...

问题是,一旦 token 被 core 返回解析器,输入的下一部分被传递给 tokenize反而。不过我想 入住 (原样)在 core 中状态。我怎么做?

谢谢!

最佳答案

我实际上设法自己找到了解决方案。我定义了我自己的分词器函数,它根据 BufferLocalStore 决定说明要调用的标记器。

let mytokenizer (lexbuf : LexBuffer<char>) =
if lexbuf.BufferLocalStore.["state"].Equals("core") then FCLexer.core lexbuf
else FCLexer.tokenize lexbuf

let aString (x : string) =
let lexbuf = LexBuffer<_>.FromString x
lexbuf.BufferLocalStore.["state"] <- "fc"
let y = try (FCParser.PROG mytokenizer) lexbuf
...

我修改了我的 fslex稍微输入文件:
rule tokenize = parse
| "core" { lexbuf.BufferLocalStore.["state"] <- "core"; core lexbuf }
...

令人惊讶的是,简单地提出问题可以引导您找到解决方案,我希望这对我以外的人有所帮助:)

关于f# - fslex - 如何在两个 token 集之间切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22724493/

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