解析lex中的注释时出错

时间:2013-08-19 15:49:37

标签: lex

Lex代码:

identifier [\._a-zA-Z0-9\/]+
comment "//"

<*>{comment}  {
    cout<<"Comment\n";
  char c;
  while((c= yyinput()) != '\n')
    {
    }
}

<INITIAL>{s}{e}{t} {
   BEGIN(SAMPLE_STATE);
   return SET;
}

<SAMPLE_STATE>{identifier} {
    strncpy(yylval.str, yytext,1023);
    yylval.str[1023] = '\0';
  return IDENTIFIER;
}

在上面的lex代码中,解析“// set name”时没有错误。请注意解析句子中“//”后面的空格。但是,当解析“// set name”时,会报告错误。你能指出我出错的地方吗?感谢。

错误由yyerror和报告

捕获
SampleParser.y:43: int CMTSTapTestSeq_yyerror(char*): Assertion `0 && "Error parsing Sample file\n"' failed. 

这个断言是我添加的。

1 个答案:

答案 0 :(得分:0)

我认为你在简化你的例子方面犯了一个错误,因为你提供的代码工作正常并且没有你指出的错误。我对其进行了编码并对其进行了测试(为方便起见,我使用 C 代替C ++)。但是,I see you posted a later question with more code that explained the problem better. I answered that one also.

s s
e e
t t
identifier [\._a-zA-Z0-9\/]+
comment "//"

%s SAMPLE_STATE

%{
//#include <iostream>
//using namespace std;
#include <stdio.h>
#define SET 1
#define IDENTIFIER 2
#define yyinput input
%}

%%
<*>{comment}  {
   // cout<<"Comment\n";
   printf("Comment\n");
  char c;
  while((c= yyinput()) != '\n')
    {
    }
}

<INITIAL>{s}{e}{t} {
   BEGIN(SAMPLE_STATE);
   //return SET;
   printf("SET\n");
}

<SAMPLE_STATE>{identifier} {
    //strncpy(yylval.str, yytext,1023);
    //yylval.str[1023] = '\0';
  //return IDENTIFIER;
  printf("identifier");
}

接受两者:

//set name
// set name