gpt4 book ai didi

ragel - 检查 Ragel 是否匹配整个输入

转载 作者:行者123 更新时间:2023-12-01 12:51:40 25 4
gpt4 key购买 nike

是否有更好的方法来要求 Ragel 消耗所有输入?这是我现在使用的:

=begin
%%{
machine my_lexer;
# ...
# extract tokens and store into `tokens`
# ...
}%%
=end

class MyLexer

%% write data;

def self.run(string)
data = string.unpack("c*")
eof = data.length
tokens = []
%% write init;
%% write exec;
data.length == p ? tokens : nil
end

end

除了 data.length == p 测试之外,上面的大部分都是样板。它有效——除了它不验证词法分析器是否以最终状态结束。因此,即使整个输入未成功解析,我的测试用例也会给我返回 token 。

有没有更好的办法?

(直接测试最终状态可能会更好。我正在研究如何做到这一点。想法?)

最佳答案

您可以使用全局或局部错误操作来处理错误。

对于全局错误操作,您可以使用以下语法:

$!action

对于机器定义本地的本地错误操作,您可以使用以下语法:

$^action

如果您在操作上放置一个标志,您可以检查该标志以检测错误。

关于ragel - 检查 Ragel 是否匹配整个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12040338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com