首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fslex如何在两个令牌集之间切换?

fslex如何在两个令牌集之间切换?
EN

Stack Overflow用户
提问于 2014-03-28 22:50:30
回答 1查看 101关注 0票数 4

我正在尝试使用fslexfsyacc编写一个小型DSL解析器。输入由两种不同语言的交错块组成,它们需要不同的词法规则。我如何编写我的fslex文件来支持这一点?

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

我现在的情况是这样的:

代码语言:javascript
复制
rule tokenize = parse
    | "core"        { core lexbuf }
    ...

and core = parse
    | ...

问题是,一旦core解析器返回令牌,则输入的下一部分将被传递给tokenize。但是,我希望保持在core状态。我该怎么做?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 23:24:33

实际上,我自己找到了一个解决方案。我定义了自己的令牌程序函数,它根据令牌程序要调用的BufferLocalStore状态来决定。

代码语言:javascript
复制
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输入文件:

代码语言:javascript
复制
rule tokenize = parse
    | "core"        { lexbuf.BufferLocalStore.["state"] <- "core"; core lexbuf }
...

令人惊讶的是,简单地问这个问题可以帮助你找到解决方案,我希望这能帮助我以外的人:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22724493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档