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

parsing - 如何使用 Flex 实现两遍扫描仪?

作为一个宠物项目,我想尝试实现一种我自己设计的基本语言,可以用作网络脚本语言。将 C++ 程序作为 Apache CGI 运行是微不足道的,因此真正的工作在于如何解析包含非代码(HTML/CSS 标记)和服务器端代码的输入文件。

在我本科的编译器课程中,我们使用FlexBison为一种简单的语言生成扫描器和解析器。我们得到了一份语法副本,并编写了一个解析器,将简单的语言翻译成虚拟机的简单程序集。flex 扫描器对输入进行标记,并将标记传递给 Bison 解析器。

这与我想做的不同之处在于,就像 PHP 一样,这种语言可以有纯 HTML 标记,而脚本语言可以像下面这样穿插:

我假设按如下方式解析输入文件会很有效,我是否不正确:

  1. 扫描输入,直到找到脚本开始标记('
  2. 第二个扫描器标记输入文件的服务器端脚本部分(来自打开标记:'')并将标记传递给解析器,它不需要知道文件中的标记。
  3. 控制权返回到继续这种一般模式的第一个扫描仪。

基本上,第一个扫描器只区分标记(直接返回到浏览器未修改)和代码,它被传递给第二个扫描器,第二个扫描器反过来标记代码并将标记传递给解析器。

如果这不是一个可靠的设计模式,PHP 等语言如何有效地处理扫描输入和解析代码?

0 投票
3 回答
2750 浏览

c# - 推荐一个好的基于 C#/.NET 的词法分析器

谁能推荐一个好的基于 .NET 的词法分析器,最好用 C# 编写?

0 投票
6 回答
9217 浏览

python - 在 Python 中高效匹配多个正则表达式

当你有正则表达式时,词法分析器很容易编写。今天我想用 Python 写一个简单的通用分析器,并想出了:

它工作得很好,但我有点担心它效率太低。是否有任何正则表达式技巧可以让我以更有效/优雅的方式编写它?

具体来说,有没有办法避免线性循环所有正则表达式规则以找到适合的规则?

0 投票
4 回答
6587 浏览

c# - C#/.NET 词法分析器生成器

我正在为 C#/.NET 寻找一个不错的词法扫描器生成器——它支持 Unicode 字符类别,并生成一些可读且高效的代码。有人知道吗?


编辑:我需要支持Unicode 类别,而不仅仅是 Unicode 字符。目前仅Lu(Letter, Uppercase) 类别就有 1421 个字符,我需要非常具体地匹配许多不同的类别,并且宁愿不手写所需的字符集。

此外,实际代码是必须的——这排除了生成二进制文件然后与驱动程序一起使用的东西(即 GOLD)


编辑:ANTLR 还不支持 Unicode 类别。不过,它有一个未解决的问题,所以有一天它可能会满足我的需求。

0 投票
2 回答
2478 浏览

regex - flex(词法分析器)正则表达式 - 重用定义

我有这个工作定义:

我不想一直重复 [a-zA-Z] 和 [0-9],所以我做了两个新定义

如何重写 IDENTIFIER 规则以使用 DIGIT 和 VALID 定义?

我不知道如何进行“第二次”比赛,我被困在这里:

谢谢。

编辑:我正在使用的整个测试程序:http: //pastebin.com/f5b64183f

0 投票
3 回答
4367 浏览

erlang - Erlang/OTP 有哪些分析器和分析器?

Erlang 有什么好的代码分析器/分析器吗?我需要一些可以为我的代码构建调用图(例如 gprof)的东西。

0 投票
7 回答
10612 浏览

algorithm - 用于文本分析的算法或库,特别是:主要词、跨文本的短语和文本集合

我正在做一个项目,我需要分析一页文本和一组文本来确定主导词。我想知道是否有一个库(首选 c# 或 java)可以为我处理繁重的工作。如果没有,是否有一种或多种算法可以实现我的以下目标。

我想做的类似于从您在网络上找到的 url 或 rss 提要构建的词云,除了我不想要可视化。它们一直用于分析总统候选人的演讲,以了解主题或最常用的词是什么。

复杂之处在于我需要对数千个短文档执行此操作,然后是这些文档的集合或类别。

我最初的计划是解析文档,然后过滤常用词 - of、the、he、she 等。然后计算剩余词在文本中出现的次数(以及整个集合/类别)。

问题是将来我想处理词干、复数形式等。我也想看看有没有办法识别重要的短语。(而不是一个单词的计数,一个短语的计数是2-3个单词一起)

任何有关策略、库或算法的指导都将受到赞赏。

0 投票
3 回答
4193 浏览

programming-languages - 您将如何实施越位规则?

我已经编写了一个可以解决问题的生成器,但我想知道实现越位规则的最佳方法。

很快:越位规则在这种情况下意味着缩进被识别为句法元素。

这是伪代码中的越位规则,用于制作以可用形式捕获缩进的标记器,我不想通过语言限制答案:

此布局器一次不会生成多个 NEWLINE,并且在出现缩进时不会生成 NEWLINE。因此解析规则仍然非常简单。我认为这很好,但请告知是否有更好的方法来完成它。

虽然使用了一段时间,但我注意到在 DEDENT 之后发出换行符可能会很好,这样你可以用 NEWLINE 分隔表达式,同时保持 INDENT DEDENT 作为表达式的预告片。

0 投票
1 回答
117 浏览

programming-languages - 适用于范围分析器的良好 API

我正在开发一些代码生成工具,很多复杂性来自于范围分析。我经常发现自己想知道诸如

  1. 函数或块的自由变量是什么?
  2. 这个符号在哪里声明?
  3. 这个声明掩盖了什么?
  4. 这种符号的使用是否可能在初始化之前发生?
  5. 这个变量有可能逃脱吗?

我认为是时候重新考虑我的范围界定问题了。

我可以完成所有这些分析,但我正在尝试找出一种构建 API 的方法,以便它易于使用,并且理想情况下,可以懒惰地完成足够多的这项工作。

人们熟悉哪些类似的工具,他们在 API 中做对与错的地方是什么?

0 投票
2 回答
2454 浏览

parsing - 在 flex/lex (parser-generator) 中实现单词边界状态

我希望能够判断模式匹配是出现在单词字符之后还是非单词字符之后。换句话说,我想在 flex/lex 不支持的模式的开头模拟 \b 分词正则表达式字符。

这是我在下面的尝试(不能按预期工作):

输入 :

预期产出

实际输出:

我这样做是因为我想做方言器之类的事情,而且我一直想学习如何使用真正的词法分析器。有时我要替换的模式需要是单词的片段,有时它们只需要是整个单词。