gpt4 book ai didi

c - 检测 RE2C 中的 IP 地址

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:47 26 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来检测 re2c ( http://re2c.org/ ) 中的 IP 地址和 float 。这是我正在使用的正则表达式

<SYMBOL>        [-+]?[0-9]+[.][0-9]+ { RETURN(FLOAT); }
<SYMBOL> [0-9]{1,3}'.'[0-9]{1,3}'.'[0-9]{1,3}'.'[0-9]{1,3} {RETURN (IPADDR); }

每当我编译时,它都会抛出有关未声明某些 YYMARKER 的错误。但如果我只使用其中一条规则,编译就没问题了。我猜 re2c 在基于回溯的正则表达式方面遇到了麻烦,因为这两个规则都有一个带有公共(public)前缀的大数据集(例如 192.132 可能是 float 和 ip 地址的开头)。

这是我用来首先生成分词器文件的命令行。 re2c 本身不会抛出任何错误。

 re2c  -c -o tokenizer.c tokenizer.re

但是当我编译 C 文件时,出现以下错误。

tokenizer.c: In function 'getnext_querytoken':
tokenizer.c:74: error: 'YYMARKER' undeclared (first use in this function)
tokenizer.c:74: error: (Each undeclared identifier is reported only once
tokenizer.c:74: error: for each function it appears in.)

有什么办法可以解决这个问题吗?

最佳答案

@sushil,你是对的:YYMARKER 是 re2c API 的一部分。

然而,re2c 并没有“因为这两个规则都有一个大数据集而无法处理基于回溯的正则表达式”。 re2c 生成的词法分析器只迭代一次输入(复杂度是线性的)。由于规则重叠,需要 YYMARKER,如本示例中所述:http://re2c.org/examples/example_01.html :

YYMARKER (line 5) is needed because rules overlap: it backups input position of the longest successful match. Say, we have overlapping rules "a" and "abc" and input string "abd": by the time "a" matches there's still a chance to match "abc", but when lexer sees 'd' it must rollback. (You might wonder why YYMARKER is exposed at all: why not make it a local variable like yych? The reason is, all input pointers must be updated by YYFILL as explained in Arbitrary large input and YYFILL example.)

关于c - 检测 RE2C 中的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28490603/

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