gpt4 book ai didi

c++ - 将词法分析器字符串累加器移植到新版本的 Quex 时出现问题

转载 作者:行者123 更新时间:2023-11-30 05:13:40 26 4
gpt4 key购买 nike

在将我的词法分析器文件从 Quex 0.64.8 移植到 0.67.4 时,我运行了字符串累加器的一些问题。问题我看起来像这样:

Severity Code Description Project File Line Suppression State
Error C3861 'ecmascript_lexer_Accumulator__clear': identifier not found (compiling source file C:\Users\Patrikj\Work\git\ecmascript_build_vc14_x64\generated\ecmascript_lexer.cpp) ktes C:\Users\Patrikj\Work\git\ecmascript\ecmascript.qx 107

我想问题的原因是双下划线 Accumulator__clear。也许我需要为 Quex 或 API 提供一个新的开关已在较新版本中更改。无论哪种方式,我都不知道该怎么做解决问题。

生成问题的词法分析器 (.qx) 示例:

mode StringHelper : EOF
<inheritable: only>
{
on_exit {
/// All 3 rows using the accumulator generates an error similiar to the one mentioned above
if(self.accumulator.text.begin != self.accumulator.text.end)
self_send(TOK_STRLITPART);

self_accumulator_flush(TOK_QUOTE);

self_accumulator_clear();
}
}

如果您能帮助解决此问题,我们将不胜感激。

最好的问候,帕特里克J

最佳答案

版本 0.67.3 及更高版本从中排除了字符串累加器主发电机。原因是在某些情况下构造中没有通用的解决方案,include-push,并重置场景。用户必须在进行时指定它们。

要使用累加器,不需要命令行选项。但是,在 .qx 文件中需要定义以下部分(这是一个例子):

header {
#include <quex/code_base/extra/accumulator/Accumulator>
}

footer {
#include <quex/code_base/extra/accumulator/Accumulator.i>
}
body {
QUEX_NAME(Accumulator) accumulator;
}
constructor {
if( ! QUEX_NAME(Accumulator_construct)(&me->accumulator, me) ) {
return false;
}
}
destructor {
QUEX_NAME(Accumulator_destruct)(&me->accumulator);
}
print {
QUEX_NAME(Accumulator_print_this)(&me->accumulator);
}

PostCategorizer 的情况是一样的。你找到设置演示子目录中的“common.qx”文件如下所示。

此外,在“flush()”之后您不需要“clear()”。

关于c++ - 将词法分析器字符串累加器移植到新版本的 Quex 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848526/

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