0

作为一项学校作业,我正在使用 FLEX 创建一个词法分析器。分析器由解析器使用,它也是分配的一部分。我们应该为一种称为 VSL 的语言使用词法分析器和解析器。但是,我似乎无法让分析仪工作。

我将使用 VSL 中的一些关键字作为示例:FUNC、PRINT 和 IF。

这是规则部分的当前输出:

"FUNC"      {return FUNC;}
"START"     {return START;}
"PRINT"     {return PRINT;}

.           { RETURN( yytext[0] ); }

这 。当不匹配任何其他规则时,只需一个一个地返回每个字符,并在大学的近乎空的文件中提供。要返回的令牌在提供的解析器中指定,上面使用的三个都在其中。我从测试输出(也由提供的工具生成)确定 FUNC、START 和 PRINT 被识别,但它们没有出现在测试输出中,显然它们没有被传递。我对变量(字符串、数字等)有同样的问题。它们由数字和/或字母组成,在规则中处理(也不需要显示它们)。我究竟做错了什么?我下一步要做什么?

如果我删除我制定的每一条规则,并让最后一条规则带有 . 仍然存在,然后所有字母和数字在测试输出中变得可见,所以我知道词法分析器至少可以识别它们。但下一步是什么?

4

1 回答 1

0

事实证明,我的 Mac OS X Mavericks 上的 gcc 编译器与我可以通过 ssh 在线访问的 GNU gcc 编译器具有不同的行为。本地编译器忽略了在线编译器生成的错误,以及与 GNU gcc 无关的本地错误。所以问题的一部分是我的困惑。

事实证明这是正确的代码:

"FUNC"      {RETURN(FUNC);}
"START"     {RETURN(START);}
"PRINT"     {RETURN(PRINT);}

.           { RETURN( yytext[0] ); }
于 2014-02-03T10:04:06.897 回答