使用flex创建词法分析器

时间:2014-02-02 23:35:58

标签: flex-lexer lex lexical-analysis lexical

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

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

以下是规则部分的当前输出:

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

.           { RETURN( yytext[0] ); }

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

如果我删除了我制作的每一条规则,并将最后一条规则与。保持,然后所有字母和数字在测试输出中都可见,所以我知道词法分析器至少可以识别它们。但下一步是什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

.           { RETURN( yytext[0] ); }