首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fslex词法javascript正则表达式

fslex词法javascript正则表达式
EN

Stack Overflow用户
提问于 2010-01-13 11:59:53
回答 2查看 605关注 0票数 2

我正在尝试对javascript中的常规exression文字进行lex。它们以"/“开头,以"/”结尾(有时还包括一些其他修饰符)。问题是,确定它是否是正则表达式而不是除法运算符的唯一方法是通过读取"/“字符之前的标记。

您可以在此here上阅读更多内容。

实际上,我找不到任何关于如何获取前一个令牌的文档。希望这是可能的,有人可以告诉我是如何做到的。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-14 08:31:25

为了解决这个问题,我创建了一个模块来跟踪最后一个令牌,并在有效令牌列表中查找"/“运算符是除法运算符还是正则表达式。

代码如下:

代码语言:javascript
复制
let mutable lastToken:token = EOF

let setToken token =
    lastToken <- token
    token

let parseDivision (lexbuf:Lexing.lexbuf) (tokenizer:Lexing.LexBuffer<'a> -> JavascriptParser.token) regexer =
    match lastToken.GetType().Name with
    | x when invalidRegexPrefix |> List.contains(x) -> DIVIDE
    | _ -> 
        let result = (regexer lexbuf.StartPos "" lexbuf)
        REGEX(result)

然后在词法分析器内部,我根据规则的结果调用setToken。例如:

代码语言:javascript
复制
| '(' { setToken LPAREN }

setToken既设置了最后一个令牌,又返回了刚刚设置的令牌,这只是为了减少对实际词法分析器代码的干扰。

"/“字符的实际规则是:

代码语言:javascript
复制
| "/"   { setToken (parseDivision lexbuf token regex) }

一旦解析完成,还需要将令牌重置为EOF,否则您可能处于不一致的状态(因为最后一个令牌是静态变量)。

票数 1
EN

Stack Overflow用户

发布于 2010-01-14 07:00:48

据我所知,没有办法获得前一个令牌(但我还没有尝试过,我很久以前就使用了FSLex )。我猜您可以保留一个指定最后处理的令牌的参数,然后使用它来决定在找到"/“字符时要做什么。

无论如何,你能发布一些你目前拥有的示例代码(例如,只是处理这个问题的一部分)吗?如果我们能看到一些示例代码,那么回答您的问题会容易得多(如果我可以尝试将它粘贴到我的Visual Studio中,看看我是否能弄清楚一些东西!)

在T。

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

https://stackoverflow.com/questions/2054293

复制
相关文章

相似问题

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