我无法找到该错误不可识别规则中的溶液

"lexicale.l", line 13: unrecognized rule 

"lexicale.l", line 13: unrecognized rule

的线13我无法找到该错误不可识别规则中的溶液

{idf} {printf("indetificateur\n");} 

的代码是:

%{ 

#include "stdio.h"

#include "stdlib.h"

%}

int [0-9]+

float [0-9]+("."[0-9]+)*

bool 0 | 1

idf [A-Z] ([0-9a-zA-Z] (_)? [0-9a-zA-Z]) {0,11}

%%

{int} {printf("int\n");}

{float} {printf("float\n");}

{bool} {printf("bool\n");}

{idf} {printf("indetificateur\n");}

. {printf("erreur\n");}

回答:

(F)法图案不能包含未引用的空白字符。

您的定义bool和您的定义idf都包含未加引号的空格。您应该从两个定义中删除空格。

由于flex解析其自己的输入文件的方式有些怪异,报告模式定义中语法错误的行号并不十分准确。特别是,定义扩展时会报告错误,而不是定义时发生错误。而且,正如在这种情况下,错误通常在不正确的定义扩展后在线上报告。

总的来说,我个人发现定义没有用处;在大多数情况下(如本例)没有明显的好处,实施中的怪异可能会导致混淆和意想不到的结果。

如果您正在使用Flex和你想使用的模式的空白,你可以环绕图案(?x:…)设置“扩展语法”标志:

idf (?x: [A-Z] ([0-9a-zA-Z] (_)? [0-9a-zA-Z]) {0,11}) 

顺便说一句,你bool模式0 | 1可以更简单地写成[01]。但是,除非将规则放置在匹配int的规则之前,否则它将不会识别任何内容,因为int规则肯定会匹配01,并且它会出现在文件的较早部分。 (这是规则的顺序重要,而不是定义。这是由于不必要地使用定义而导致的另一种可能的混淆。)

以上是 我无法找到该错误不可识别规则中的溶液 的全部内容, 来源链接: utcz.com/qa/266732.html

回到顶部