问题标签 [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.
pattern-matching - 拉格尔字符串匹配
我正在尝试为我正在从事的项目学习 ragel。我是新来的。
我有一个 15 个字符串的列表。问题是检查给定的字符串是否与这 15 个字符串中的任何一个匹配。
在正常情况下,用 15 个字符串构建一个哈希集就足以对字符串进行 O(1) 查找并判断它是否匹配。
就我而言,我将这样做十亿次。所以我正在尝试使用 ragel 为这 15 个字符串构建一个状态机,并检查给定的字符串是否匹配。
我觉得使用 ragel 方法更好,因为在这两种情况下,我都必须一个一个地浏览角色。即,为了计算哈希值,我们需要扫描所有字符一次,然后进行查找。使用状态机扫描所有字符一次会给出结果并避免进行查找。
这是更好的方法吗?任何人都可以告诉我如何为 15 个字符串构建状态机来进行字符串匹配吗?
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
c - Ragel中的字符串插值
我正在尝试实现一种语言,并且我使用 Ragel 作为词法分析器(和野牛作为解析器)。我希望能够在我的语言中支持字符串插值,但我不确定如何做到这一点。
我的词法分析器对语言的主要部分使用如下扫描仪:
我需要做什么才能像处理字符串插值一样"hello #{world}"
?
c - 使用 Ragel 解析器捕获字段
我正在考虑使用 Ragel 在嵌入式系统中为 NMEA GPS 数据生成词法分析器。我将有一个任意大小的缓冲区,我将从 UART 读取数据块,并且对于每次读取,我都会将该数据传递给词法分析器。
我希望能够提取特定字段,但问题是我不能保证整个字段都存在于数据块中。任何字段都可能被拆分为两次读取,因此将指针设置为字段的开始和结束可能会将开始指针留在前一个(现在被覆盖)缓冲区的末尾,而结束指针在它之前。
想到的一种解决方案是在每个字段上使用“$”操作,将字符一个接一个地推入另一位内存(可能是结构字段)。这是最好的方法吗?
ragel - 如何确定两个重叠表达式的优先级?(拉格尔)
我有 2 种表达方式:
显然,任何 ident 都是一个字符串。Ragel 有优先操作员来克服这个问题。但无论我如何尝试设置优先级,要么某些 ident 执行这两个操作,要么忽略某些有效字符串(以有效 ident 作为前缀的有效字符串,例如:ab$)。
我找到了一种解决方法,不使用优先级:
但是如果我有多个重叠的表达式,这将变得很麻烦。这是唯一实用的方法吗?
任何有关正确方法的帮助将不胜感激。
regex - 为什么我的简单 Ragel 语法会使用所有内存并崩溃
我正在尝试将一组来自 Adblock Plus 规则的正则表达式转换为可以从 C++ 调用的优化函数。
我期望能够使用诸如 Ragel 之类的词法分析器生成器来执行此操作,但是当我尝试使用非常小的一组正则表达式时,内存使用量变得非常高 > 30 GB,并且 Ragel 退出时没有错误消息并且没有生成输出文件。
我在下面包含了玩具语法,我试图了解我是否在做任何可以优化以解决问题的愚蠢行为。
ragel - 如何在机器实例化范围之外使用 ragel 标签
当执行一个动作时,我希望该动作在某些条件下触发跳转到另一个状态。为了代码可读性,我还想在机器实例化之外定义操作。
如何在机器实例化范围之外访问由 ragel 生成的状态标签?
osx-mavericks - 在小牛队上编译 ragel
我已经下载了 ragel 源代码并尝试编译它。
我无法配置它。运行时出现以下错误
./configure --prefix=前缀
-bash: ./configure: 没有这样的文件或目录
我已经下载了所有必要的命令行编译工具。不确定缺少什么。
objective-c - Ragel 和 NSMutableString
是否可以让 Ragel 在 NSMutableString 上工作?
我想使用 Ragel 生成 DFA 来标记 NSMutableString。这个“可变”部分意味着我不能cStringUsingEncoding:
在单个字符发生变化时使用。据我所知,有两个问题:
即使在Objective C中,Ragel附带的示例似乎也用于
char *
获取字符。但我不知道如何获取指向不断变化的NSMutableString的指针。是否有可能迫使 RagelcharacterAtIndex:
改用它?那会不会很慢?如果我理解正确,NSString 可能会在运行时更改其内部表示,即它并不总是 UTF-16。例如,当它仅包含 ASCII 时,它使用单字节编码。但是一旦出现超出有效范围的字符,它就会切换到多字节编码。是否有可能在 Ragel 中解释这一点?