如何解决我无法匹配Lex中定义的模式的问题?

时间:2019-04-08 14:44:55

标签: lex

我正在编写用于扫描Verilog代码的Lex代码,并且定义了我想要匹配的模式。但是,当我运行代码时,我发现定义的模式不匹配。我在哪里弄错了?

我在Linux工作站上运行代码。 flex版本是2.5.4。

%option c++
%option noyywrap
%{
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
vector<string> input_vec;        /*To remember which signal is input*/

int input_num = 0;        /*To count the # of input signals*/
%}

%x INPUT

var_string [a-z]+

%%

input {
        cout << "BEGIN INPUT" << endl;
        BEGIN INPUT;
      }

[ \n\t\r\f]+

.

<INPUT>{var_string} {
                      cout << "IN INPUT MATCHING var_string:" << yytext << endl;
                      input_num++;
                      input_vec.push_back(yytext);
                    }
<INPUT>; {BEGIN 0;}
<INPUT>,
<INPUT>[ \n\t\r\f]+


%%


int main(int argc, char* argv[])
{
  ifstream input_file("test.v");
  FlexLexer* lexer;
  lexer = new yyFlexLexer(&input_file, &cout);
  while(lexer->yylex()!=0);
  cout << "Input Number: " << input_num << endl;
  return 0;
}

这是我要扫描的Verilog代码。

module test(a, b, c, sum, carry);
input
 a,
 b,
 c;
output
 sum,
 carry;
wire
 d;
assign
 d = (~b & a) | (b & ~a),
 sum = (d & c) | (d & ~c),
 carry= (a & b) | (b & c) | (a & c);
endmodule

除了在Lex代码扫描输入部分的a,b和c时,输出为:

开始输入

在输入匹配中var_string:a

输入匹配var_string:b

在输入匹配中var_string:c

输入数字:3

但是,实际输出是:

开始输入

输入数字:0

0 个答案:

没有答案