verilog: parser: verilog_lexical_context: Added delay value tracking

Added tracking delay values up to next semicolon in
always/final/begin/initial statements to avoid misinterpreting the arrow
as an implication

Signed-off-by: Jan Bylicki <jbylicki@antmicro.com>
diff --git a/verilog/parser/verilog_lexical_context.cc b/verilog/parser/verilog_lexical_context.cc
index d6ce739..749a663 100644
--- a/verilog/parser/verilog_lexical_context.cc
+++ b/verilog/parser/verilog_lexical_context.cc
@@ -567,6 +567,7 @@
       if (in_initial_always_final_construct_) {
         // Exit construct for single-statement bodies.
         // e.g. initial $foo();
+        seen_delay_value_in_initial_always_final_construct_context = false;
         if (block_stack_.empty()) {
           in_initial_always_final_construct_ = false;
         }
@@ -626,6 +627,12 @@
         in_extern_declaration_ = false;  // reset
       }
       break;
+    case '#':
+      if (in_initial_always_final_construct_) {
+        seen_delay_value_in_initial_always_final_construct_context = true;
+      }
+      // std::cout << "Found delay" << std::endl;
+      break;
     default:
       break;
   }  // switch (token.token_enum)
@@ -740,6 +747,9 @@
   }
   // return {true, "inside 'always/initial/final'"};
   // }
+  if (seen_delay_value_in_initial_always_final_construct_context) {
+    return {true, "seen a delay value, expecting another statement"};
+  }
   return {false, "all other cases (default)"};
 }
 
diff --git a/verilog/parser/verilog_lexical_context.h b/verilog/parser/verilog_lexical_context.h
index e176686..9ffbd63 100644
--- a/verilog/parser/verilog_lexical_context.h
+++ b/verilog/parser/verilog_lexical_context.h
@@ -296,6 +296,8 @@
 
   bool in_initial_always_final_construct_ = false;
 
+  bool seen_delay_value_in_initial_always_final_construct_context = false;
+
   bool in_function_declaration_ = false;
   bool in_function_body_ = false;