Flex编译.lex文件时出现unrecognized rule错误是什么原因?
问题排查结果
错误根因
flex的定义段中,空格是模式名与模式内容的分隔符,同一模式内容内部不能插入空格。你代码中HEX_QUAD、OCTAL_ESC等多个模式的定义里插入了多余空格,导致flex无法识别规则内容,触发unrecognized rule报错。
修复方案
删除所有模式定义内部的多余空格,以下是修复后的定义段代码(即%}到%%之间的部分):
LETTER [a-zA-Z] DIGIT [0-9] NONDIGIT {LETTER}|"_" /* Digits */ OCTAL_DIGIT [0-7] HEX_DIGIT [0-9a-fA-F] HEX_QUAD {HEX_DIGIT}{HEX_DIGIT}{HEX_DIGIT}{HEX_DIGIT} /* Escape sequences */ SIMPLE_ESC "\\'"|"\\\""|"\\?"|"\\\\"|"\\a"|"\\b"|"\\f"|"\\n"|"\\r"|"\\t"|"\\v" OCTAL_ESC "\\{OCTAL_DIGIT}({OCTAL_DIGIT}?)({OCTAL_DIGIT}?)" HEX_ESC "\\{HEX_DIGIT}+" UCHRNAME ("\\u"{HEX_QUAD})|("\\U"{HEX_QUAD}{HEX_QUAD}) ESCAPE_SEQ {SIMPLE_ESC}|{OCTAL_ESC}|{HEX_ESC}|{UCHRNAME} C_CHAR [^'\\]|{ESCAPE_SEQ} C_CHAR_SEQ {C_CHAR}+ /* Literals */ CHAR_LITERAL "'"{C_CHAR_SEQ}"'"
额外注意
当前字符常量的解析逻辑仅适配了单普通字符、单字节转义字符的场景,未兼容八进制3位转义、十六进制多字符转义的情况,后续需要补充对应处理逻辑,否则会读取到错误的字符值。
内容的提问来源于stack exchange,提问作者almaember
相关产品推荐
相关产品推荐

