# Examine tokens emitted by the SV lexer for a trivial module.
# Not intended to stress any particular corner of the language.

---input---
// Adder flops the sum of its inputs
module Adder #(
    parameter int N = 42
) (
    output logic [N-1:0] y,
    output logic         co,

    input  logic [N-1:0] a,
    input  logic [N-1:0] b,
    input  logic         ci,

    input  logic clk
);
    always_ff @(posedge clk) begin
        {co, y} <= a + b + ci;
    end
endmodule : Adder

---tokens---
'// Adder flops the sum of its inputs\n' Comment.Single

'module'      Keyword
' '           Text.Whitespace
'Adder'       Name
' '           Text.Whitespace
'#'           Punctuation
'('           Punctuation
'\n    '      Text.Whitespace
'parameter'   Keyword
' '           Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'N'           Name
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'42'          Literal.Number.Integer
'\n'          Text.Whitespace

')'           Punctuation
' '           Text.Whitespace
'('           Punctuation
'\n    '      Text.Whitespace
'output'      Keyword
' '           Text.Whitespace
'logic'       Keyword.Type
' '           Text.Whitespace
'['           Punctuation
'N'           Name
'-'           Operator
'1'           Literal.Number.Integer
':'           Operator
'0'           Literal.Number.Integer
']'           Punctuation
' '           Text.Whitespace
'y'           Name
','           Punctuation
'\n    '      Text.Whitespace
'output'      Keyword
' '           Text.Whitespace
'logic'       Keyword.Type
'         '   Text.Whitespace
'co'          Name
','           Punctuation
'\n\n    '    Text.Whitespace
'input'       Keyword
'  '          Text.Whitespace
'logic'       Keyword.Type
' '           Text.Whitespace
'['           Punctuation
'N'           Name
'-'           Operator
'1'           Literal.Number.Integer
':'           Operator
'0'           Literal.Number.Integer
']'           Punctuation
' '           Text.Whitespace
'a'           Name
','           Punctuation
'\n    '      Text.Whitespace
'input'       Keyword
'  '          Text.Whitespace
'logic'       Keyword.Type
' '           Text.Whitespace
'['           Punctuation
'N'           Name
'-'           Operator
'1'           Literal.Number.Integer
':'           Operator
'0'           Literal.Number.Integer
']'           Punctuation
' '           Text.Whitespace
'b'           Name
','           Punctuation
'\n    '      Text.Whitespace
'input'       Keyword
'  '          Text.Whitespace
'logic'       Keyword.Type
'         '   Text.Whitespace
'ci'          Name
','           Punctuation
'\n\n    '    Text.Whitespace
'input'       Keyword
'  '          Text.Whitespace
'logic'       Keyword.Type
' '           Text.Whitespace
'clk'         Name
'\n'          Text.Whitespace

')'           Punctuation
';'           Punctuation
'\n    '      Text.Whitespace
'always_ff'   Keyword
' '           Text.Whitespace
'@'           Punctuation
'('           Punctuation
'posedge'     Keyword
' '           Text.Whitespace
'clk'         Name
')'           Punctuation
' '           Text.Whitespace
'begin'       Keyword
'\n        '  Text.Whitespace
'{'           Punctuation
'co'          Name
','           Punctuation
' '           Text.Whitespace
'y'           Name
'}'           Punctuation
' '           Text.Whitespace
'<'           Operator
'='           Operator
' '           Text.Whitespace
'a'           Name
' '           Text.Whitespace
'+'           Operator
' '           Text.Whitespace
'b'           Name
' '           Text.Whitespace
'+'           Operator
' '           Text.Whitespace
'ci'          Name
';'           Punctuation
'\n    '      Text.Whitespace
'end'         Keyword
'\n'          Text.Whitespace

'endmodule'   Keyword
' '           Text.Whitespace
':'           Operator
' '           Text.Whitespace
'Adder'       Name
'\n'          Text.Whitespace
