问题标签 [lexer]

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 投票
1 回答
653 浏览

parsing - 为什么 ANTLR 解析跳过令牌?

我正在尝试做一些非常基本的 C++ 函数声明解析。这是我解析输入参数的规则:

问题是我试图通过它:

它将“int”与 t 匹配,但随后跳过 TYPEMOD,在尝试匹配 n 时抛出异常说 * 是不需要的,然后将“param”与 n 匹配。为什么它会跳过 TYPEMOD 令牌而不匹配它?

提前致谢!

编辑:

这是我的空格规则(我也包括了我的注释规则),在解析类声明、属性、结构等其他内容时,一切似乎都运行良好,只是这些 TYPEMOD 的东西......

0 投票
1 回答
2508 浏览

parsing - 如何在 Ragel 中解析模板语言?

我一直在研究简单模板语言的解析器。我正在使用雷格尔。

要求适中。我正在尝试找到可以嵌入输入字符串中任何位置的 [[tags]] 。

我正在尝试解析一种简单的模板语言,它可以在 HTML 中嵌入诸如 {{foo}} 之类的标签。我尝试了几种方法来解析它,但不得不求助于使用 Ragel 扫描仪并使用仅匹配单个字符作为“全部捕获”的低效方法。我觉得这是错误的做法。我实际上是在滥用扫描仪的最长匹配偏差来实现我的默认规则(它只能是 1 个字符长,所以它应该始终是最后的手段)。

(用 ruby​​ 编写的动作,但应该很容易理解)。

您将如何为如此简单的语言编写解析器?Ragel 可能不是正确的工具吗?如果语法是这样不可预测的,您似乎必须与 Ragel 牙齿和指甲作斗争。

0 投票
1 回答
762 浏览

parsing - yacc/lex 的基本问题

我对一个非常简单的 yacc/lex 程序有一些问题。我可能忘记了一些基本步骤(我已经很久没有使用这些工具了)。

在我的 lex 程序中,我给出了一些基本值,例如:

在我的 yacc 程序中,我的语法开头是(其中 TranslationUnit 是我的 %start):

当我使用输入运行程序时:

我以为我至少会得到:

其实我得到:

我不明白这个结果。我前段时间学习过语法,即使我现在不记得所有内容,我也没有看到任何重要的错误......

在此先感谢您的帮助。

0 投票
1 回答
858 浏览

exception - ANTLR:具有相似文字的 MismatchedTokenException

我有以下

输入:

为什么词法分析器无法匹配这个?当 ANTLR 匹配 'a_b' 中的 'a_' 时,它不应该回溯或使用前瞻或其他东西来查看它不能匹配令牌 A,然后决定将令牌 A 匹配为 'a',然后继续将令牌 B 匹配为 '_b'?

我想我误解了一些关于 antlr 如何工作的非常基本的东西。我试图在 ANTLR 文档和谷歌中阅读它。但我很少有使用词法分析器和解析器的经验。

非常感谢您的帮助。

0 投票
4 回答
2528 浏览

php - 是否有 Javascript 词法分析器/标记器(在 PHP 中)?

我在 Mozilla.org 上看到了几个 Python Javascript 标记器和一个关于 Javascript Lexer 的神秘文档,但找不到任何专门用于 PHP 的 Javascript 标记器。有吗?

谢谢

0 投票
1 回答
3440 浏览

xml - 解析器与词法分析器和 XML

我现在正在阅读有关编译器和解析器架构的信息,我想知道一件事……当您拥有 XML、XHTML、HTML 或任何基于 SGML 的语言时,词法分析器在这里的作用是什么,令牌是什么?

我读过令牌就像为lexer解析准备的单词。虽然我在查找 C、C++、Pascal 等语言的标记方面没有问题,其中有关键字、名称、文字和其他由空格分隔的类似单词的字符串,但使用 XML 我有问题,因为没有没有任何话!它只是与标记(标签)交错的纯文本。

我心想,这些标签和纯文本片段可能是标记,类似于:[TXT][TAG][TAG][TXT][TAG][TXT][TAG][TAG][TXT].... 这是相当合理的,因为 SGML 不关心标记分隔符内的内容,<并且>(好吧,它在找到?!作为下一个字符时识别特殊处理指令和定义;注释也属于该组),并且 SGML 标记器可以成为 XML/HTML/XHTML 解析器的基础。

但是后来我意识到,<作为其他语法的一部分,标记中可以填充字符:属性值:-/ 即使将<字符放在属性值中并不是一个好主意(最好使用&lt;它),许多浏览器和编辑器处理它并将它们<视为属性值的一部分,而不是标签分隔符。

它使事情变得有点复杂,因为我看不到通过词法分析器中的简单确定性有限自动机 (DFA) 来识别这样的标记的方法。当自动机在标签内时,它看起来需要一个单独的上下文,当它遇到属性值时需要另一个上下文。我认为这需要一堆状态/上下文,所以 DFA 可能无法处理。我对吗?

你有什么看法?从标签(标记)和纯文本制作标记是否很好?

在这里:http://www.antlr.org/wiki/display/ANTLR3/Parsing+XML
使用了某种不同的技术:它们将<and >(以及</and />)视为单独的标记,并在它们GENERIC_ID用作标记的标签内等.他们通常将大部分工作转移到解析器。但是他们还必须更改标记器的上下文:他们在纯文本中使用不同的上下文,并且在标记中使用不同的上下文(但我认为他们忘记了属性值上下文,因为第一次出现 of>将在他们的词法分析器中结束标记)。

那么解析类 SGML 语言的最佳方法是什么?词法分析器真的在那里使用吗?如果是,哪些字符串构成了标记?

0 投票
1 回答
4076 浏览

java - ANTLR:Unicode 字符扫描

问题:无法正确打印 Unicode 字符。

这是我的语法:

调用词法分析器的主要方法的代码片段:

对于输入"ठ",我得到以下输出:

词法分析器似乎将 Unicode 字符“ठ”视为三个单独的字符。我的目标是扫描和打印“ठ”。

0 投票
5 回答
1106 浏览

c++ - “查找”关键字的最有效方法

好的,所以我正在编写一个函数作为词法分析器的一部分,用于“查找”或搜索与关键字的匹配项。我的词法分析器捕获了所有明显的标记,例如单字符和多字符运算符 ( + - * / > < = == etc) (注释和空格也已经被删除)所以我在收集了一个只有字母数字字符(包括下划线)的流之后调用了一个函数string,这个然后需要将字符串作为已知关键字或标识符进行匹配。

所以我想知道如何识别它?我知道我基本上需要将它与某个列表或数组或所有内置关键字中的某些内容进行比较,如果它匹配一个返回匹配它的相应枚举值;否则,如果不匹配,则它必须是函数或变量标识符。那么我应该如何寻找匹配项呢?我在某处读到所谓的二叉搜索树是一种有效的方法,或者使用哈希表,问题是我从来没有使用过,所以我不确定它是否是正确的方法。我可以使用 MySQL 数据库吗?

0 投票
1 回答
247 浏览

javascript - ANTLR - 为词法分析器规则发出多个标记

鉴于目标语言是 JavaScript,我想知道 ANTLR 是否支持为词法分析器规则发出多个标记。我发现它支持其他目标语言的多个标记,例如 Java 和 CSharp,但找不到任何关于 JavaScript 支持此功能的文档。

如果有人可以向我指出这方面的任何材料,那就太好了。

谢谢!!

0 投票
1 回答
797 浏览

antlr - Antlr(词法分析器):匹配正确的标记

在我的 Antlr3 语法中,我有几个“重叠”的词法分析器规则,如下所示:

尽管像100110123这样的标记可以被多个规则匹配,但它总是由上下文决定它必须是其中的哪一个。例子:

然后输入{17}应该匹配{INT},但词法分析器已经确定17是 NAT 令牌。如何防止这种行为?backtrack选项已经设置为 true,但它似乎只影响解析器规则。