我正在尝试编写一个正则表达式来检测 re2c ( http://re2c.org/ )中的 IP 地址和浮点数。这是我正在使用的正则表达式
<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 在基于回溯的正则表达式方面遇到了问题,因为这两个规则都有一个带有公共前缀的大型数据集(例如 192.132 可能是浮点数和 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.)
有什么办法可以解决这个问题吗?