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

c++ - 使用 Ragel 和 C++ 编译错误

在过去的两天里,我正在尝试学习 Ragel,并且一直面临与 Ragel 语法相关的一些问题。我的目标是编写一个解析器,它可以识别以 C++ 作为宿主语言的正则表达式命令。现在我正在尝试使用解析器识别以下命令 -:LoadSdf [0-9]+

下面是我正在尝试的以下代码:

当我尝试使用命令编译时ragel ldf.cpp- 我收到以下错误:

但是,如果我直接将代码编写为

我遇到的第二个问题是当我尝试为我的状态机编写以下内容时 -

当命令与预期不匹配时,我想打印一个错误。上面的代码使用 ragel 命令编译。但是,当我尝试使用g++ ldf.c -o ldf- 进行编译时,会出现以下编译器错误:

欢迎任何建议。

0 投票
1 回答
170 浏览

c++ - 如何让 Ragel 执行不同的解析操作

我是 Ragel 的新手,一直在尝试解析 Regex 表达式的特定模式。done如果找到匹配项, 我希望执行操作,并且parse_error即使缺少任何单个字符也没有匹配项,我希望执行操作。

这是我写的代码:

我看到的行为是,当正则表达式完全匹配时,动作done和都被执行。parse_error

任何人都可以提供一些关于我如何处理这种情况的提示吗?

0 投票
1 回答
73 浏览

regex - Ragel 是否可以执行单独的命令解析并相应地抛出错误

我试图解析一个命令:LoadSdf 12 abc.ldf ,我试图在命令的每个阶段(,,,:LoadSdf12得到错误abc.ldf。但是我得到了不同的行为,如问题的后面部分所示。

以下是我的 Ragel 伪代码

预期输出:

观察到的输出:

用于错误处理的 Ragel 语法非常困难并且解释非常有限。如果对当前案例提供任何建议,将有很大帮助。

0 投票
1 回答
38 浏览

fsm - What is the DEF state in the Ragel (6.10) document illustrations

The Ragel 6.10 manual has many illustrations of the FSM it generates. Some of which show a state DEF. As best I can tell this is never defined/discussed.

  1. What is the DEF state?
  2. What are its implications? e.g. if it shows up in your FSM abc should be done

Thanks in advance

0 投票
1 回答
1004 浏览

parsing - Lin 描述符文件解析器

我正在尝试研究可能的解析器,作为开发可用于解析 Lin Descriptor File 的 PC 应用程序的一部分。当前的解析器应用程序基于 flex-bison 解析方法。现在我需要重新设计解析器,因为当前的解析器无法检测到特定的错误。

我以前使用过 Ragel 解析器(https://en.wikipedia.org/wiki/Ragel)来解析正则表达式(Regex:https ://en.wikipedia.org/wiki/Regular_expression )命令,事实证明它非常方便。

但是,由于当前的复杂性LDF-file,我不确定 Ragel(以 C++ 作为宿主语言)是否是解析LDF-file. 这样做的原因是LDF-file有很多数据不是固定的或恒定的,而是根据供应商而变化。此外,这些LDF字段必须保留对其他字段的引用以检测文件中的错误。当解析结构固定时,Ragel 更适合(这就是我在开发 Regex 解析器时发现的)

已经从事过此类项目的任何人都可以提供一些技巧来为 Lin Descriptor File 选择合适的解析器。

Lin 描述符文件示例:http ://microchipdeveloper.com/lin:protocol-app-ldf

0 投票
1 回答
178 浏览

parsing - 在 Ragel 中解析整数和 HEX 值

我正在尝试设计一个使用 Ragel 和 C++ 作为主机语言的解析器。有一种特殊情况,参数可以以两种格式定义:

我有下面的代码来解析这样的参数:

然而,在上面定义的解析器命令中,只有整数值(如 a 节中定义)被正确识别和解析。如果提供了十六进制数字(例如 0x24),则该数字将存储为 '0' 。如果是十六进制数,则不会调用错误。解析器识别十六进制,但存储的值为“0”。

我似乎遗漏了 Ragel 的一些小细节。有没有人遇到过类似的情况?

代码的剩余部分:

0 投票
1 回答
154 浏览

c++ - 在 Ragel 中解析“换行符”的问题

我使用 Ragel 和 C++ 作为主机来解析一些命令。命令从文件中读取,然后使用以下语法进行解析。

该命令的语法如下:

现在在上面的语法中 :,信号名称之后或之后可以有一个 NEWLINE,后跟逗号,

这是我在解析上述命令时遵循的 Ragel 语法。

我面临的问题是文件中遇到的新行。对于上面给出的示例,我收到以下错误 ERROR::Expected string characters at line = 2

根据 Ragel 6.10 文档,FSMspace必须检测以下内容

Whitespace. [\t\v\f\n\r ]

我还尝试用以下 FSM 替换空间:

_CR = ('\r' | '\n' | '\r\n' );

但即使是上述一个也不起作用。

有没有人遇到过类似的情况?我在 Stackoverflow 上看到了一些关于 Ragel 和换行的问题,但它似乎并没有特别解决这里的问题。

0 投票
1 回答
975 浏览

c++ - 使用 Ragel 解析 C++ 代码库中的字符串的原因是什么?

我继承了一个使用 Ragel 进行字符串解析的 C++ 项目。

这是我第一次看到这样做,我想了解为什么有人会使用 Ragel 而不是 C++ 来解析字符串?

0 投票
2 回答
184 浏览

lexer - ragel 不是设计用于文件吗?

调查 ragel 并且无法弄清楚如何合理地从文件中读取。据我了解,它需要一个不会在令牌中间损坏的内存缓冲区。这显然需要大量的工作来实现,特别是如果我不知道标记的大小,例如带有换行符、转义符等的字符串。如果我正在实现所有这些,我不确定我是否需要愤怒了。

没有更好的办法吗?

0 投票
2 回答
258 浏览

ragel - fgoto on binary variable length protocol with ragel

I tried to write a parser to a simple binary protocol

  • 0 or more out of frame bytes
  • Start of frame with STX (0x02)
  • Two messaje length bytes for messaje length.
  • One command byte .
  • 0 or more data bytes.
  • One checksun byte.

The ragel script

machine state

But the result machine don't jump to check (5) status so doesn't execute checksum_action and don't return to the first state to continue parsing.

What is wrong?

Follow @Roman recomendations I post a full example. This example doesn't work either because get a wrong checksum.

I change

by

but is not a solution.