小编use*_*894的帖子

字符类中的 Flex 错误负范围

我正在使用 Flex 和 Bison 编写解析器,并将各种标记定义为:

[0-9]+          { yylval.str=strdup(yytext); return digit; }

[0-9]+\.[0-9]*      { yylval.str=strdup(yytext); return floating; }

[a-zA-Z_][a-zA-Z0-9_]*  { yylval.str=strdup(yytext);  return key; }

[a-zA-Z/][a-zA-Z_-/.]*  { yylval.str=strdup(yytext);  return string; }

[a-zA-Z0-9._-]+     { yylval.str=strdup(yytext);  return hostname; }

["][a-zA-Z0-9!@#$%^&*()_-+=.,/?]* { yylval.str=strdup(yytext);  return qstring1; }

[a-zA-Z0-9!@#$%^&*()_-+=.,/?]*["] { yylval.str=strdup(yytext);  return qstring2; }

[#].+           { yylval.str=strdup(yytext);  return comment;}

[ \n\t]         {} /* Ignore white space. */

.           {printf("ERR:L:%d\n", q); return ERROR;}
Run Code Online (Sandbox Code Playgroud)

它在字符串、qstring1 和 qstring2 的正则表达式中显示错误“字符类中的负范围”。

有人可以帮我解决我出错的地方吗?

规范是: 非引号字符串可以包含 ASCII 字母数字字符、下划线、连字符、正斜杠和句点,并且必须以字母或斜杠开头。

带引号的字符串可以在引号之间包含任何字母数字字符。

我为带引号的字符串采用了两个不同的字符串,以便满足更多的规范。

谢谢。

regex flex-lexer

2
推荐指数
1
解决办法
5745
查看次数

在ADA83中循环

我在Ada83中编写了以下代码来查找文件的大小:

with Text_IO;
use Text_IO;

procedure imp3ada is

package Int_IO is new Text_IO.Integer_IO(Integer);
use Int_IO;

inputFile: File_Type;
i: integer:=0;
fileSize: Integer:=0;
fileCurrentPosition: Integer:=0;

begin
    open(inputFile, In_File, "test.cfg");
        while not End_of_File(inputFile) loop
        fileCurrentPosition:=fileCurrentPosition+1;
        end loop;
    fileSize:=fileCurrentPosition;
    Int_IO.put(fileCurrentPosition);
    Int_IO.put(fileSize);
    close(inputFile);
end imp3ada;
Run Code Online (Sandbox Code Playgroud)

代码编译得很好,但是当我尝试运行时没有任何反应,我希望它能够打印文件中的字符数.我猜它会进入无限循环.有人可以帮助我解决它出错的地方吗?

file-io ada while-loop

0
推荐指数
1
解决办法
178
查看次数

标签 统计

ada ×1

file-io ×1

flex-lexer ×1

regex ×1

while-loop ×1