问题标签 [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 回答
1989 浏览

java - Ragel - 在输入时验证字符串

假设我们要验证用户输入,而用户正在输入 JTextField。为了验证用户输入,我想知道我是否可以使用 Ragel。

假设输入应遵循此示例正则表达式:

我怎么能用 ragel 做到这一点?任何人都可以举一个简短的例子,如何使用 ragel “即时”(输入时)验证用户输入吗?

Ragel 文档遗漏了一些快速入门的好例子,所以我在这里问。

0 投票
3 回答
3171 浏览

parsing - ANTLR 是序列化/反序列化二进制数据格式的合适工具吗?

我需要读取和写入八位字节流以通过各种网络发送以与智能电表通信。有一个 ANSI 标准 ANSI C12.19 描述了二进制数据格式。虽然数据格式并不太复杂,但该标准非常庞大(500 多页),因为它描述了许多不同的类型。该标准完全由 EBNF 语法描述。我正在考虑使用 ANTLR 来读取 EBNF 语法或其修改版本,并创建可以读取和写入八位字节流的 C# 类。

这是对ANTLR的好用吗?

如果是这样,我需要做什么才能使用 ANTLR 3.1?通过搜索新闻组档案,我似乎需要实现一个可以读取字节而不是字符的新流。这就是全部还是我还必须实现 Lexer 衍生产品?

如果 ANTLR 可以帮助我读取/解析流,它也可以帮助我编写流吗?

谢谢。

丹芬卡内

0 投票
9 回答
6708 浏览

java - 哪个面向 Java 的词法分析器用于简单项目(ANTLR、DIY 等)

我正在开发一个小型文本编辑器项目,并希望为几种语言(Java、XML ..仅举几例)添加基本的语法突出显示。作为学习经验,我想添加一个流行或不流行的 Java 词法分析器。

你推荐什么项目。Antlr 可能是最知名的,但它看起来相当复杂和沉重。

这是我知道的选项。

  1. 蚂蚁
  2. Ragel(是的,它可以生成用于处理输入的 Java 源代码)
  3. 自己做(我想我可以编写一个简单的令牌解析器并突出显示源代码)。
0 投票
2 回答
1307 浏览

ruby - 为无限流封装(纯 Ruby)Ragel 解析器?

我想使用 Ragel 使用状态机解析连续的字节流(来自套接字)

但是,我发现的所有示例要么一次性解析完整文件(如Gherkin 词法分析器,要么使用 Ragels C Target(如mongrel HTTP1.1 Parser

我正在寻找一些关于如何实例化 Ragel 状态机然后向其添加字节以保持现有状态完整的建议或示例。

我正在寻找的最终界面类似于:

非常感谢有关如何在 Ragel 中执行此操作的任何建议。我宁愿使用它,也不愿手动编写另一个状态机。

也许 Ragel 不是正确的工具?如果不是:我应该改用什么?

0 投票
1 回答
510 浏览

java - 滥用 ragel,可能需要新的方法/工具

我正在尝试使用 Ragel 来实现一个简单的 yes/no fsm。不幸的是,语言规范由大约一千个正则表达式的联合组成,其中大多数运算符出现一次或多次。因此,可能的状态数量激增,似乎不可能使用 Ragel 为我的语言生成 fsm。有没有可以做我需要的工具,或者我应该交换方法?我需要比依次检查每个正则表达式的输入字符串更好的东西。我可以将一千个正则表达式切成约 50 个的块,并为每个块生成一个 fsm,并对所有机器运行每个输入字符串,但是如果有一个工具可以在没有这种 hack 的情况下处理这种工作,我会很高兴听到它。

谢谢!

0 投票
2 回答
400 浏览

parsing - 如何创建一个解析器来标记从文件中提取的单词列表?

我正在尝试为我的编译器类做一个语法文本校正器。这个想法是:我有一些规则,这是语言(在我的例子中是葡萄牙语)固有的,比如“一个有效的短语是主语动词形容词”,就像“Ruby is great”一样。

好的,所以首先我必须标记输入“Ruby 很棒”。所以我有一个文本文件“动词”,有很多动词,一行一行。然后我有一个文本“形容词”,一个“代词”等。

我正在尝试使用 Ragel 创建解析器,但我不知道如何执行以下操作:

我查看了 ANTLR、Lex/Yacc、Ragel 等。但找不到一个似乎可以解决这个问题的。我能想到的唯一方法是预处理 Ragel 的输入文件,以便我的程序读取文件并将其内容写入正确的位置。但我也不喜欢这个解决方案。

有谁知道我怎么能做到这一点?没有Ragel也没问题,我只想解决这个问题。我想使用 Ruby 或 Python,但这也不是必需的。

谢谢。

0 投票
1 回答
2508 浏览

parsing - 如何在 Ragel 中解析模板语言?

我一直在研究简单模板语言的解析器。我正在使用雷格尔。

要求适中。我正在尝试找到可以嵌入输入字符串中任何位置的 [[tags]] 。

我正在尝试解析一种简单的模板语言,它可以在 HTML 中嵌入诸如 {{foo}} 之类的标签。我尝试了几种方法来解析它,但不得不求助于使用 Ragel 扫描仪并使用仅匹配单个字符作为“全部捕获”的低效方法。我觉得这是错误的做法。我实际上是在滥用扫描仪的最长匹配偏差来实现我的默认规则(它只能是 1 个字符长,所以它应该始终是最后的手段)。

(用 ruby​​ 编写的动作,但应该很容易理解)。

您将如何为如此简单的语言编写解析器?Ragel 可能不是正确的工具吗?如果语法是这样不可预测的,您似乎必须与 Ragel 牙齿和指甲作斗争。

0 投票
3 回答
2716 浏览

d - 解析器生成器和 Ragel... 制作我自己的 D 解析器

我是编译器领域的新手,最近听说了一种叫做解析器生成器的东西。根据我(认为)我的理解,解析器生成器接收一个语法文件并输出一个源代码文件,该文件可以解析具有给定语法的文件。

几个问题:

  1. 我理解正确吗?

  2. 如果是这样,Ragel 是这样的工具吗?

  3. 如果是,Ragel 能否将 D 解析器输出为 D 源代码?

谢谢!

0 投票
5 回答
1228 浏览

c - 这段 Ragel Code 有什么作用?

编辑:让我理解这个“>”运算符的含义。我在对@jcomeu 的评论中引用了 ragel 指南中的描述

我知道在 RecordDigit 之前调用了 ClearNumber 动作,如果是这样,currentNumber 被初始化为零,将它乘以 10 有什么用。

最后,数字的定义。是什么number=((digit @RecordDigit)+) >ClearNumber意思?

这是代码的来源:这里

编辑:* RecordDigit 具体是如何工作的?pdigit =(*p)- '0';是什么指针?如果是这样,它指向什么?什么意思?[解决了]

0 投票
1 回答
1383 浏览

lexical-analysis - 如何使用 Ragel 正确扫描标识符

我正在尝试为我出于个人原因设计的类似 C/C++/C#/Java/D 的编程语言编写扫描仪。对于这个任务,我使用 Ragel 来生成我的扫描仪。我无法准确理解许多操作员何时触发操作,这可能是因为我的学者专注于实践知识而不是理论,而且这种非确定性/确定性有限自动机业务的大部分内容都在我脑海中浮现。我发现文档要么缺乏,要么我对它的理解如此。我假设后者。

无论如何,我正在从基础开始。我在第一次迭代中确定了几个关键字和特殊字符。现在我遇到了所有关键字都被扫描为标识符的问题。我对所有关键字都使用了扫描仪运算符,因为这解决了我的字符串returns被扫描为returnandreturns关键字的问题。

如何正确扫描标识符?我知道要使这种确定性具有确定性,我需要有效地指定一个词位只能是一个,identifier如果它不匹配其他令牌的模式。原谅我缺乏知识。

拉格尔脚本: