gpt4 book ai didi

使用 Ragel 解析器捕获字段

转载 作者:行者123 更新时间:2023-12-04 04:33:09 24 4
gpt4 key购买 nike

我正在考虑使用 Ragel 在嵌入式系统中为 NMEA GPS 数据生成词法分析器。我会有一个任意大小的缓冲区,我可以在其中读取来自 UART 的数据块,并且对于每次读取,我都会将该数据传递给词法分析器。

我希望能够提取特定字段,但问题是我不能保证整个字段都存在于一个数据块中。任何字段都可能被拆分为两次读取,因此将指针设置为字段的开始和结束可能会将开始指针留在前一个(现在已覆盖)缓冲区的末尾,而将结束指针放在它之前。

想到的一个解决方案是在每个字段上使用 '$' 操作将字符一个一个地插入另一位内存(可能是结构字段)。这是最好的方法吗?

最佳答案

对于它的值(value),我最终得到了这个:

%%{
machine nmea;

action store { *wptr = fc; }
action append { *wptr++ = fc; }
action term { *wptr++ = 0; }

integer = digit+;
float = digit+ '.' digit+;

rmc = '$GPRMC,'
float ','
[AV] >{ wptr = &loc.valid; } $store ','
float? >{ wptr = loc.lat; } $append %term ','
[NS]? >{ wptr = &loc.ns; } $store ','
float? >{ wptr = loc.lng; } $append %term ','
[EW]? >{ wptr = &loc.ew; } $store
print*
'\n' >{ printf("%c, %s, %c, %s, %c\n", loc.valid, loc.lat, loc.ns, loc.lng, loc.ew); }
;

main := any* rmc;
}%%

关于使用 Ragel 解析器捕获字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230689/

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