问题标签 [ragel]

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

pattern-matching - 拉格尔字符串匹配

我正在尝试为我正在从事的项目学习 ragel。我是新来的。

我有一个 15 个字符串的列表。问题是检查给定的字符串是否与这 15 个字符串中的任何一个匹配。

在正常情况下,用 15 个字符串构建一个哈希集就足以对字符串进行 O(1) 查找并判断它是否匹配。

就我而言,我将这样做十亿次。所以我正在尝试使用 ragel 为这 15 个字符串构建一个状态机,并检查给定的字符串是否匹配。

我觉得使用 ragel 方法更好,因为在这两种情况下,我都必须一个一个地浏览角色。即,为了计算哈希值,我们需要扫描所有字符一次,然后进行查找。使用状态机扫描所有字符一次会给出结果并避免进行查找。

这是更好的方法吗?任何人都可以告诉我如何为 15 个字符串构建状态机来进行字符串匹配吗?

0 投票
1 回答
265 浏览

ruby - Prevent Ragel from calling actions multiple times while matching the same string

I have this parser:

And I hit it with abxc then why does it call the captured twice / the e twice, and how can I prevent this ?

on github: https://github.com/grosser/ragel_example

0 投票
2 回答
449 浏览

c - Ragel中的字符串插值

我正在尝试实现一种语言,并且我使用 Ragel 作为词法分析器(和野牛作为解析器)。我希望能够在我的语言中支持字符串插值,但我不确定如何做到这一点。

我的词法分析器对语言的主要部分使用如下扫描仪:

我需要做什么才能像处理字符串插值一样"hello #{world}"

0 投票
2 回答
427 浏览

c - 使用 Ragel 解析器捕获字段

我正在考虑使用 Ragel 在嵌入式系统中为 NMEA GPS 数据生成词法分析器。我将有一个任意大小的缓冲区,我将从 UART 读取数据块,并且对于每次读取,我都会将该数据传递给词法分析器。

我希望能够提取特定字段,但问题是我不能保证整个字段都存在于数据块中。任何字段都可能被拆分为两次读取,因此将指针设置为字段的开始和结束可能会将开始指针留在前一个(现在被覆盖)缓冲区的末尾,而结束指针在它之前。

想到的一种解决方案是在每个字段上使用“$”操作,将字符一个接一个地推入另一位内存(可能是结构字段)。这是最好的方法吗?

0 投票
2 回答
496 浏览

ragel - 如何确定两个重叠表达式的优先级?(拉格尔)

我有 2 种表达方式:

显然,任何 ident 都是一个字符串。Ragel 有优先操作员来克服这个问题。但无论我如何尝试设置优先级,要么某些 ident 执行这两个操作,要么忽略某些有效字符串(以有效 ident 作为前缀的有效字符串,例如:ab$)。

我找到了一种解决方法,不使用优先级:

但是如果我有多个重叠的表达式,这将变得很麻烦。这是唯一实用的方法吗?

任何有关正确方法的帮助将不胜感激。

0 投票
1 回答
447 浏览

regex - 为什么我的简单 Ragel 语法会使用所有内存并崩溃

我正在尝试将一组来自 Adblock Plus 规则的正则表达式转换为可以从 C++ 调用的优化函数。

我期望能够使用诸如 Ragel 之类的词法分析器生成器来执行此操作,但是当我尝试使用非常小的一组正则表达式时,内存使用量变得非常高 > 30 GB,并且 Ragel 退出时没有错误消息并且没有生成输出文件。

我在下面包含了玩具语法,我试图了解我是否在做任何可以优化以解决问题的愚蠢行为。

0 投票
1 回答
212 浏览

ragel - 如何在机器实例化范围之外使用 ragel 标签

当执行一个动作时,我希望该动作在某些条件下触发跳转到另一个状态。为了代码可读性,我还想在机器实例化之外定义操作。

如何在机器实例化范围之外访问由 ragel 生成的状态标签?

0 投票
1 回答
118 浏览

osx-mavericks - 在小牛队上编译 ragel

我已经下载了 ragel 源代码并尝试编译它。

我无法配置它。运行时出现以下错误

./configure --prefix=前缀

-bash: ./configure: 没有这样的文件或目录

我已经下载了所有必要的命令行编译工具。不确定缺少什么。

0 投票
1 回答
98 浏览

objective-c - Ragel 和 NSMutableString

是否可以让 Ragel 在 NSMutableString 上工作?

我想使用 Ragel 生成 DFA 来标记 NSMutableString。这个“可变”部分意味着我不能cStringUsingEncoding:在单个字符发生变化时使用。据我所知,有两个问题:

  1. 即使在Objective C中,Ragel附带的示例似乎也用于char *获取字符。但我不知道如何获取指向不断变化的NSMutableString的指针。是否有可能迫使 RagelcharacterAtIndex:改用它?那会不会很慢?

  2. 如果我理解正确,NSString 可能会在运行时更改其内部表示,即它并不总是 UTF-16。例如,当它仅包含 ASCII 时,它使用单字节编码。但是一旦出现超出有效范围的字符,它就会切换到多字节编码。是否有可能在 Ragel 中解释这一点?

0 投票
1 回答
396 浏览

regex - UTF-8 匹配位置