diff options
author | Peter <peter@crozier.com> | 2020-02-27 16:57:35 +0000 |
---|---|---|
committer | Grazfather <grazfather@gmail.com> | 2020-03-22 18:20:46 -0700 |
commit | 14f32028ec878b8ba7324584631523f5b571b39f (patch) | |
tree | fc514f9a764edfe861c48f77434ff7aad408d67e /frontends/verilog/verilog_lexer.l | |
parent | f828cb5132b5d1a2c2d4d26ffaac6d492c7cc69e (diff) | |
download | yosys-14f32028ec878b8ba7324584631523f5b571b39f.tar.gz yosys-14f32028ec878b8ba7324584631523f5b571b39f.tar.bz2 yosys-14f32028ec878b8ba7324584631523f5b571b39f.zip |
Parser changes to support typedef.
Diffstat (limited to 'frontends/verilog/verilog_lexer.l')
-rw-r--r-- | frontends/verilog/verilog_lexer.l | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/frontends/verilog/verilog_lexer.l b/frontends/verilog/verilog_lexer.l index d22a18458..74e8dce7f 100644 --- a/frontends/verilog/verilog_lexer.l +++ b/frontends/verilog/verilog_lexer.l @@ -372,9 +372,33 @@ supply1 { return TOK_SUPPLY1; } "$signed" { return TOK_TO_SIGNED; } "$unsigned" { return TOK_TO_UNSIGNED; } +[a-zA-Z_][a-zA-Z0-9_]*::[a-zA-Z_$][a-zA-Z0-9_$]* { + // package qualifier + auto s = std::string("\\") + yytext; + if (pkg_user_types.count(s) > 0) { + // found it + yylval->string = new std::string(s); + return TOK_USER_TYPE; + } + else { + // backup before :: just return first part + size_t len = strchr(yytext, ':') - yytext; + yyless(len); + yylval->string = new std::string(std::string("\\") + yytext); + return TOK_ID; + } +} + [a-zA-Z_$][a-zA-Z0-9_$]* { - yylval->string = new std::string(std::string("\\") + yytext); - return TOK_ID; + auto s = std::string("\\") + yytext; + if (user_types.count(s) > 0) { + yylval->string = new std::string(s); + return TOK_USER_TYPE; + } + else { + yylval->string = new std::string(std::string("\\") + yytext); + return TOK_ID; + } } [a-zA-Z_$][a-zA-Z0-9_$\.]* { |