问题标签 [lexical-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7012 浏览

parsing - 如何将令牌流转换为解析树

我构建了一个词法分析器,可以从输入中流出标记,但我不确定如何构建该过程的下一步 - 解析树。有没有人有任何好的资源或例子来说明如何做到这一点?

0 投票
2 回答
20446 浏览

python - Python 正则表达式 - 如何从通配符表达式中捕获多个组?

我有一个 Python 正则表达式,其中包含一个可以出现零次或多次的组 - 但是当我之后检索组列表时,只有最后一个存在。例子:

re.search("(\w)*", "abcdefg").groups()

这将返回列表 ('g',)

我需要它返回 ('a','b','c','d','e','f','g',)

那可能吗?我该怎么做?

0 投票
5 回答
1174 浏览

c++ - 如何在 C++ 中解析字符串

我想解析字符串,以便检查它们是否具有指定的语法。

例子:

这里我的要求是在后面Z应该有一个数字,然后是 a-和之后R应该有一个数字,然后是l,然后是一个空格,然后是 finally t

如果除此之外有任何其他内容,它应该是一个错误。

我必须像这样解析许多不同类型的语法。如果为每种所需的语法类型编写一个函数,我会很尴尬。听说yacc或者lex可以解决这个问题。

任何人都可以对我的问题有所了解吗?

0 投票
3 回答
2992 浏览

regex - FLEX:有没有办法一次返回多个令牌

在 flex 中,我想为一个正则表达式的匹配返回多个标记。有没有办法做到这一点?

0 投票
1 回答
14747 浏览

ruby - 如何在 Ruby 中解析制表符分隔的文本行?

我发现 Ruby 的each功能有点混乱。如果我有一行文本,each循环将给我每个空格分隔的单词,而不是每个单独的字符。

那么检索由制表符分隔的字符串部分的最佳方法是什么。目前我有:

但这并不完全正确。

0 投票
10 回答
4506 浏览

parsing - 您是否曾经在现实世界的应用程序中有效地使用过词法分析器/解析器?

最近,我开始学习ANTLR。我知道词法分析器/解析器一起可以用来构建编程语言。

除了 DSL 或编程语言,您是否曾直接或间接使用词法分析器/解析器工具(和知识)来解决现实世界的问题?普通程序员是否有可能在没有词法分析器或解析器知识的情况下解决这些问题?

0 投票
2 回答
3387 浏览

c++ - Bison 似乎无法正确识别 C 字符串文字

我的问题是我试图运行一个我使用 flex-bison 扫描仪解析器编码的问题。我的程序应该做的是接受用户输入(在我的例子中,查询我正在设计的数据库系统)、lex 和解析,然后执行相应的操作。实际发生的是我的解析器代码没有正确解释我提供给它的字符串文字。

这是我的代码:

我的输入,按照“查询:”提示:

查询:插入 abc(5);
输入:1.0-5:语法错误,意外字符串,预期文件结尾或行尾或 INSERT 或 ';'

现在,如果我从第 130 行的 parser.yy 代码中删除“INSERT”字符串文字,程序运行得很好。事实上,在存储输入数据(即“abc”和整数 5)后,它会正确返回给我。

起初,我认为这是字符编码的问题。Bison 代码需要使用相同的编码进行编译和运行,这应该不是问题,因为我正在从同一个终端编译和运行。

我的系统详情:

Ubuntu 8.10 (Linux 2.6.24-16-generic)
flex 2.5.34
bison 2.3
gcc 4.2.4

如果您需要更多信息或代码,请告诉我!

0 投票
4 回答
746 浏览

regex - 语法高亮的正则表达式有哪些替代方法?

在 Vim 中编辑这个和那个时,我经常发现它的语法高亮(对于某些文件类型)有一些缺陷。我现在不记得任何例子,但肯定有人会。通常,它包含在某些情况下严重突出显示的字符串,一些带有算术和布尔运算符的东西以及其他一些小东西。

现在,vim 使用正则表达式来处理那种东西(它自己的风格)。

但是,我开始遇到一些编辑器,乍一看,它们的语法突出显示得到了更好的照顾。我一直认为正则表达式是解决这类问题的方法。

所以我想知道,那些编辑只是有更好的书面正则表达式,还是他们以其他方式处理?什么 ?当您希望它“稳定”时,如何处理语法突出显示?在您看来,哪位编辑做得最好(在您选择的编辑中),他是如何做到的(语言方面)?

Edit-1:例如,像 Emacs、Notepad2、Notepad++、Visual Studio 这样的编辑器——你是否知道他们使用什么机制来进行 syn. 高的。?

0 投票
3 回答
4965 浏览

javascript - 表达式解析:如何分词

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

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

我需要这个能够支持:

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

出于安全原因,我特别想避免使用eval()或任何类似的东西。此外,eval()无论如何都不会为我标记表达式。

0 投票
2 回答
7347 浏览

utf-8 - 如何制作 flex(词法扫描仪)来读取 UTF-8 字符输入?

似乎flex不支持 UTF-8 输入。每当扫描仪遇到非 ASCII 字符时,它就会停止扫描,就像它是 EOF 一样。

有没有办法强制 flex 吃掉我的 UTF-8 字符?我不希望它真正匹配 UTF-8 字符,只是在使用 '.' 时吃掉它们。图案。

有什么建议吗?

编辑

最简单的解决方案是:

任何 [\x00-\xff]

并使用“任何”而不是“。” 在我的规则中。