我正在编写用于扫描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