问题标签 [alex]

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 回答
465 浏览

haskell - 如何编译 BNF 转换器?

有人用 ghc-7.2.1 和 alex-3 成功构建了 BNFC 吗?我试图手动修复它,但有很多错误。有谁知道我在哪里可以找到一些可以帮助我完成它的补丁?提前致谢。

0 投票
1 回答
1418 浏览

haskell - Haskell Alex - 包装模板中的错误

我试图总体上理解 Alex 和词法分析器,但我无法运行我的词法分析器。

我在“basic”和“posn”包装器中编写了词法分析器,但我不能在“monad”包装器中。我想我必须使用monad包装器,因为我需要在输入中收集字符串和令牌位置。我还需要多个状态。现在我正在尝试运行这个简单的例子:

我的行动是undefined暂时的。当我尝试编译它时,我收到了这个错误:

当我尝试在 Alex 的 github 存储库中编译示例时,我也遇到了各种错误,这可能与版本不匹配有关吗?我已经使用 ghc 7.0.4 从 cabal 安装了 alex。有任何想法吗?

0 投票
1 回答
1259 浏览

regex - Haskell Alex - 正则表达式匹配错误的字符串?

我正在尝试为基于缩进的语法编写词法分析器,但在匹配缩进时遇到了麻烦。

这是我的代码:

问题是在 line 中\n $whitespace* { setIndent },正则表达式匹配错误的字符串并setIndent使用这个错误的字符串调用。出于调试目的,我添加unsafePerformIOsetIndent函数,这是程序的示例运行:

所以setIndent被称为不仅仅是空格。并且在它返回用于缩进的词位之后,字符串的其他部分被省略。

这是亚历克斯的错误吗?或者我做错了什么?

0 投票
1 回答
282 浏览

haskell - 在 Haskell 中是否有任何现成的词法分析解决方案允许运行时动态词典?

我正在开发一个小型 Haskell 项目,该项目需要能够将一个非常小的严格格式的英语子集转换为用于语义解析的标记。对于具有许多不同末端执行器的系统来说,这是一个非常幼稚的自然语言界面,而不是可以发出命令。我目前正在为此使用 Alex,但 Alex 依赖其词典进行静态编译。系统的本质是编译后世界上末端执行器的数量甚至类型可以增加也可以减少,因此我需要能够在运行时从词典中添加或删除可行的标记。

我试过四处寻找动态词法分析解决方案,我能得到的最接近的是这个动态词法引擎,它看起来自 2000 年以来就没有更新过。

我一直在考虑一些技术,比如使用不太高级的方法(也许是 Attoparsec),或者甚至为 Alex 连接一个重新编译钩子并将词法分析器与应用程序的其余部分分开。

这种词法分析有什么众所周知的解决方案吗?我打算最终为工作程序员完成自然语言处理,这样我就可以采取一种不太简化的方法,但目前我需要一个基本的词法分析器。

0 投票
1 回答
260 浏览

haskell - Alex right_ctx end-of-line ($) 阻塞在文件末尾

Alex我有一个看起来像这样的规则

因此,单行以标识符开头,后跟冒号,然后是行尾。

除非该行是文件中的最后一行并且\n末尾没有 a ,否则这可以正常工作。发生这种情况时,$不匹配并且扫描失败。我需要做什么来匹配行尾 ( \n) 或文件末尾?

0 投票
1 回答
201 浏览

regex - 如何使用嵌入字符串标记字符串?

我正在学习如何使用名为Alex 1的 Haskell 词法分析器工具。

我正在尝试为此字符串(电子邮件“发件人:”标题)实现词法分析器:

我想把它分解成这个令牌列表:

下面是我的实现。如果字符串不包含显示名称,它可以正常工作。也就是说,这很好用:

但是,当我包含显示名称时,我会收到以下错误消息:

也就是说,这会导致错误:

我猜我的Alex程序的这一部分导致了错误:

左边Alex是一个正则表达式:

右侧是找到与正则表达式匹配的字符串时要执行的操作:

关于问题可能是什么的任何想法?

这是我的词法分析器程序:


1 “Alex”词法分析器工具可以在这个 URL 找到:http ://www.haskell.org/alex/doc/html/introduction.html

0 投票
2 回答
331 浏览

mongodb - Mongodb elemMatch alex bilbie 库

我正在为 mongo db 使用 alex bilbie 库(https://github.com/alexbilbie/codeigniter-mongodb-library/tree/v2)。我不知道如何用这个库形成 elemMatch 查询。

我需要将其转换为 alexs lib。

0 投票
1 回答
1158 浏览

parsing - Haskell 解析 - 与 Alex 进行 Parsec

如何使用 Alex 作为词法分析器,然后将令牌输入 Parsec 进行解析?

有没有例子?

我认为 Alex 用于词法分析比 Parsec 更好(也更容易?),但 Parsec 似乎比 Happy 更容易进行解析。他们可能会成为一个很好的组合。

0 投票
1 回答
534 浏览

parsing - 为什么字符串的词法分析器规则优先于我的所有其他规则?

使用 Alex 词法分析器我正在创建一个词法分析器来标记电子邮件“来自标头”。这是一个示例标题:

“John Doe”被称为“显示名称”,我们假设它可以包含任何 ASCII 字符。

同样让我们假设电子邮件地址的部分可以由任何 ASCII 字符组成。

下面是我的 Alex 程序。当我在上面的“From header”上运行它时,我只得到一个令牌:

显然这条规则:

优先于所有其他规则。为什么?

我认为优先级基于规则在我的程序中物理列出的顺序:检查输入字符串是否匹配第一个规则,如果不匹配则检查输入字符串是否匹配第二个规则,等等。不?

如何表达我的规则,以便词法分析器将“From header”标记为这些标记:

并且显示名称和电子邮件部分可以包含任何 ASCII 字符?

这是我的亚历克斯词法分析器:

0 投票
1 回答
654 浏览

xml - 如何使用 Alex 和 Happy 对 XML 电子邮件消息进行 Lex、解析和序列化

我正在努力输入任何电子邮件并输出等效的 XML 编码。

我从小处着手,使用其中一个电子邮件标头——“发件人标头”

以下是 From Header 的示例:

我希望它转换成这个 XML:

我想使用词法分析器“Alex”(http://www.haskell.org/alex/doc/html/)来分解(标记)From Header。

我想使用解析器“Happy”(http://www.haskell.org/happy/)来处理标记并生成解析树。

然后我想使用序列化程序来遍历解析树并输出 XML。

From Header 的格式由 Internet 消息格式 (IMF)、RFC 5322 ( https://www.rfc-editor.org/rfc/rfc5322 ) 指定。

以下是 From Headers 和所需 XML 输出的更多示例:

从没有显示名称的标题:

所需的 XML 输出:

来自没有显示名称且地址周围没有尖括号的标题:

所需的 XML 输出:

来自具有多个邮箱的 Header,每个邮箱用逗号分隔:

所需的 XML 输出:

RFC 5322 说注释的语法是:( … )。这是一个包含评论的 From Header:

我希望在词法分析期间删除所有评论。

所需的 XML 输出是这样的:

RFC 说,可以在 From Header 中散布“折叠空格”。这是一个 From Header,第一行是 From: 标记,第二行是显示名称,第三行是地址:

XML 输出不应受折叠空格的影响:

RFC 说,地址中的 @ 字符之后可以是括在括号中的字符串,例如:

我必须承认,我从未见过与此相关的电子邮件。尽管如此,RFC 说它是允许的,所以我当然希望我的词法分析器和解析器处理这样的输入。这是所需的输出:

错误处理

如果 From Header 不正确,我希望生成一个错误。以下是一些错误的 From Headers 示例和所需的输出:

显示名称错误地放在地址之后:

输出应指定发现错误的位置:

此 From Header 在显示名称前有一个错误的“23”:

同样,输出应指定发现错误的位置:

您能否展示如何实现词法分析器、解析器和序列化器?