问题标签 [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 投票
10 回答
22192 浏览

javascript - 用 Javascript 编写的词法分析器?

我有一个项目,用户需要为完全用 javascript 编写的 ui 定义一组指令。我需要能够解析一串指令,然后将它们翻译成指令。是否有任何用于解析 100% javascript 的库?还是会在 javascript 中生成的生成器?谢谢!

0 投票
2 回答
5592 浏览

c++ - ANTLR 3.2 中的 C++ 代码生成准备好了吗?

我正在努力让 ANTLR 3.2 在 C++ 中生成解析器/词法分析器。这是徒劳的。不过,Java 和 C 进展顺利。

我正在使用本教程开始:http ://www.ibm.com/developerworks/aix/library/au-c_plusplus_antlr/index.html

当我检查 *.stg 文件时,我发现:

CPP只有

C有很多文件:

其他语言也是如此。

我的CG文件:

错误:

... 等等。

请多多指教。谢谢!我正在使用 Leopard 10.5.8

0 投票
1 回答
432 浏览

whitespace - 删除空格,但最后这样做?

我正在尝试解析 Lua,它在某些情况下依赖于空格,因为它不使用大括号作为范围。我认为只有在另一个规则不匹配时才丢弃空格是最好的方法,但我不知道该怎么做。有人能帮我吗?

0 投票
2 回答
1176 浏览

java - 使用 Scanner/Parser/Lexer 进行脚本整理

我正在研究用 Java 实现的 JavaScript 整理器/合成器。它有效,但必须有更好的方法来实现它,我认为 Lexer 可能是前进的方向,但我有点模糊。

我为合成器开发了一种元语法,它是 JavaScript 语言的一个子集。就典型的 JavaScript 解释器而言,合成器元语法是合法的,只是不起作用(我使用保留字的同义词作为标签,后跟合成器应该解释的代码块)。现在,我正在使用扫描仪和正则表达式来查找源文件中的元语法,然后根据合法表达式的检测进行浅层词法转换。

重写的 javascript 和我不满意的扫描器/解析器之间存在紧密耦合,因为重写的 javascript 使用了专门为此目的编写的对象支持库的功能,并且该库可能会发生变化。

我希望我可以只在 Backaus-Naur 或 EBNF 中声明元语法,将其提供给词法分析器(ANTRL?),并根据在源文件中检测到的元语法表达式,将合成器定向到某些操作,例如将所需的脚本附加到另一个脚本,声明变量,为适当参数化的库函数调用生成文本,甚至压缩脚本。

这是制作合成器的合适方法吗?我是否应该使用 Scanner/Parser/Lexer 方法来合成 JavaScript?任何反馈表示赞赏-我不太确定从哪里开始:)

更新:这是一个更具体的示例——使用元语法的示例对象声明:

这描述了对象 ie.ondevice.Example,它继承了 Mixin 并类似于(即“实现相同的功能和特征”)TraitsDeclaration。合成器将检测 use 语句,如果命名空间没有映射到有效的文件位置,则合成器会失败,或者在对象声明所在的脚本之前添加,在排序之前预处理元语法。

用我提到的对象支持库表示的重写规则将导致文件看起来像这样(我已经开发了多种表示对象的方法):

也许我过度构建了我的需求,但我真正想要的是一个事件驱动的整理器——然后侦听器可以松散地耦合到指令检测。

0 投票
4 回答
467 浏览

parsing - lexers / parsers for (un) structured text documents

There are lots of parsers and lexers for scripts (i.e. structured computer languages). But I'm looking for one which can break a (almost) non-structured text document into larger sections e.g. chapters, paragraphs, etc.

It's relatively easy for a person to identify them: where the Table of Contents, acknowledgements, or where the main body starts and it is possible to build rule based systems to identify some of these (such as paragraphs).

I don't expect it to be perfect, but does any one know of such a broad 'block based' lexer / parser? Or could you point me in the direction of literature which may help?

0 投票
2 回答
2042 浏览

c++ - 如何编写野牛文件以自动使用 C 头文件中定义的令牌枚举列表?

我正在尝试使用 Bison/Yacc 构建一个解析器,以便能够解析另一个模块完成的令牌流。令牌已在枚举类型中列出,如下所示:

我已经多次阅读了 bison 的文档,但我找不到比复制 Bison 文件中的每个令牌更好的解决方案,如下所示:

如果我必须这样做,如果其他模块规范发生变化(这种情况经常发生),维护文件将变得非常困难。

你能告诉我怎么做吗,或者给我指出好的方向(欢迎任何想法/评论)。这对我有很大帮助!提前致谢。

0 投票
4 回答
804 浏览

java - 什么是合适的词法分析器生成器,可用于从许多语言源文件中去除标识符?

我正在为我的大学开展一个小组项目,该项目将用于计算机科学中的抄袭检测。

我的小组主要使用这篇期刊文章中描述的散列/指纹技术:Winnowing: Local Algorithms for Document Fingerprinting这与MOSS抄袭检测系统的工作方式非常相似。

我们基本上是在获取同学源代码的 k-gram 散列,并在数据库中查找相关匹配项(以及在我们如何确定选择哪些散列作为文档指纹方面进行大量优化)。

我们项目的第一个方面是它的“前端”部分,它将包含有关我们的检测系统可以处理的每种文件格式的一些语义知识。这将允许我们从文档中删除一些我们不再需要的用于剽窃检测的细节。基本上,我们希望能够将各种编程语言中的所有变量重命名为常量字符串或字母。

我们可以使用什么轻量级解决方案(词法分析器生成器或类似的东西)来帮助将不同语言源代码文件中的所有变量重命名为常量?

我们的项目是用 Java 编写的。

理想情况下,我只想能够为每种语言定义一个语法,然后我们的前端将能够将该语言源文件中的所有标识符重命名为某个常量。然后,我们将为我们想要支持的每种文件格式(java、c++、python 等)执行此操作。

0 投票
2 回答
378 浏览

java - 如何跨转换跟踪字符串中的原始字符位置?

我正在为我的 CS 课做一个反抄袭项目。这涉及通过一种描述为“Winnowing: Local Algorithms for Document Fingerprinting”的技术来检测计算机科学课程(编程作业)中的抄袭行为。

基本上,我正在做一组编程作业。假设其中一项任务如下所示:

这需要通过前端的词法分析部分来去除我们不想要的代码的功能。在这种情况下,我想将所有标识符名称重命名为常量“V”并从代码中删除所有注释。

为此,我们将使用ANTLR和各种语言的现有语法来生成适当的词法分析器。

最终结果是这样的:

然后我们去除所有空格以获得:

然后将该字符串分解为预设大小的 k-gram。例如说 k = 5(实际上它会更大):

这是问题所在:

每个 k-gram 都使用滚动散列函数进行散列,并且应该与它们在源文本中的原始字符位置一起记录。k-gram 哈希和字符位置一起形成指纹。

如何在标识符、注释和空白的所有前端剥离中跟踪源文本中的 k-gram 原始位置?

这对于程序的最后阶段是必不可少的,您可以在原始源文本中突出显示成对的文档中的匹配项。为了突出 k-gram 哈希的匹配,我需要知道 k-gram 在原始源中的开始和结束位置。

0 投票
2 回答
145 浏览

programming-languages - 为什么有些语言需要在调用之前在代码中声明函数?

假设你有这个伪代码

为什么某些编程语言需要调用 do_something() 出现在函数声明下方才能运行代码?

0 投票
2 回答
504 浏览

parsing - Antlr3 - 解析器中的隐藏令牌

您可以在解析器的单个规则中的隐藏通道中使用词法分析器中定义的标记,就好像它是普通标记一样?生成的代码是Java...

谢谢