首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表达式解析:如何标记

问表达式解析:如何标记
EN

Stack Overflow用户
提问于 2009-05-22 17:30:30
回答 2查看 5.2K关注 0票数 4

我希望在Javascript代码中标记Java/Javascript类表达式。我的输入将是一个包含表达式的字符串,输出需要一个令牌数组。

做这种事的最佳做法是什么?我需要迭代字符串还是有一个正则表达式可以帮我做到这一点?

我需要它能够支持:

  • 数字和字符串文字(单引号和双引号,带引号转义)
  • 基本的数学和布尔运算符和比较器(+,-,*,/,!和,not,<,>等等)
  • 递归对象访问的点和括号表示法(foo.bar,foo‘’bar‘,foo2)
  • 带嵌套的括号
  • 三值运算符(foo?酒吧:'baz')
  • 函数调用(foo(bar))

出于安全考虑,我特别希望避免使用eval()或任何类似的东西。此外,eval()也不会为我标记这个表达式。

EN

回答 2

Stack Overflow用户

发布于 2009-05-22 17:44:07

对于速度不重要的简单的词汇者,我通常会为每种标记编写一个正则表达式,并反复尝试将每个标记与输入的开头依次匹配。(确保您没有得到O(n^2)算法!)像lex这样的工具将产生一个更高效的lexer,因为它将regexes组合成一个状态机。

票数 0
EN

Stack Overflow用户

发布于 2009-05-22 17:44:47

您需要实现一个词法分析器。您可以使用js/cc来实现它,也可以自己实现有限自动机。

因为在形式上,您要操作的语言是规则的,所以您可以使用正则表达式。但我没有再向你推荐。

虽然我从来没有使用js/cc,但我会先尝试使用它,如果它不起作用,我将尝试自己构建一个词法分析器。

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

https://stackoverflow.com/questions/899020

复制
相关文章

相似问题

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