# This package implements a SystemVerilog lexer and parser.

load("//bazel:bison.bzl", "genyacc")
load("//bazel:flex.bzl", "genlex")
load(
    "//common/parser:yacc.bzl",
    "record_recovered_syntax_errors",
    "std_move_parser_symbols",
)

licenses(["notice"])

package(
    default_visibility = [
        "//verilog:__subpackages__",
    ],
)

genlex(
    name = "verilog_lex",
    src = "verilog.lex",
    out = "verilog.yy.cc",
)

cc_library(
    name = "verilog_lexer",
    srcs = [
        "verilog.yy.cc",
        "verilog_lexer.cc",
    ],
    hdrs = ["verilog_lexer.h"],
    copts = select({
        "@platforms//os:windows": [],
        "//conditions:default": [
            "-Wno-implicit-fallthrough",
        ],
    }),
    deps = [
        ":verilog_token_enum",
        "//bazel:flex",
        "//common/lexer:flex_lexer_adapter",
        "//common/text:token_info",
        "@com_google_absl//absl/strings",
    ],
)

cc_test(
    name = "verilog_lexer_unittest",
    size = "small",
    srcs = ["verilog_lexer_unittest.cc"],
    deps = [
        ":verilog_lexer",
        ":verilog_token_enum",
        "//common/lexer:lexer_test_util",
        "//common/text:token_info",
        "@com_google_absl//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

# To reduce cyclic header dependencies, split out verilog.tab.hh into:
# 1) enumeration only header (depends on nothing else)
# 2) parser prototype header (depends on parser parameter type)
# Do not use verilog.tab.hh directly anywhere.
# Even the comments in bison-generated files suggest they may be inclined
# to separate these headers in the future.  This is a workaround until then.
genrule(
    name = "gen_verilog_token_enum",
    srcs = ["verilog.tab.hh"],
    outs = ["verilog_token_enum.h"],
    # Needs own include-guard.
    cmd = "{ echo '#ifndef VERIBLE_VERILOG_TOKEN_ENUM_H_' ; " +
          "echo '#define VERIBLE_VERILOG_TOKEN_ENUM_H_' ; " +
          "echo '// DO NOT EDIT -- generated from $<' ; " +
          # Grab the enumeration definition.
          "sed -n '/#ifndef VERILOG_TOKENTYPE/,/#endif/p' $< ; " +
          "echo '#endif  // VERIBLE_VERILOG_VERILOG_TOKEN_ENUM_H_' ;} > $@",
)

cc_library(
    name = "verilog_token_enum",
    hdrs = ["verilog_token_enum.h"],
)

genrule(
    name = "verilog_parse_interface",
    srcs = ["verilog.tab.hh"],
    outs = ["verilog_parse_interface.h"],
    # Already contains include-guard from verilog.tab.hh
    cmd = "{ echo '// DO NOT EDIT -- generated from $<' ; " +
          # Filter out the enumeration definition.
          "sed -e '/#ifndef YYTOKENTYPE/,/#endif/d' $< ;} > $@",
)

genyacc(
    name = "verilog_y",
    src = "verilog.y",
    extra_options = [
        "--report-file=$(location verilog.output)",
        "--graph=$(location verilog.dot)",
    ],
    extra_outs = [
        "verilog.output",
        "verilog.dot",
    ],
    header_out = "verilog.tab.hh",  # Do not use directly, see next comment.
    source_out = "verilog.tab.cc",
)

std_move_parser_symbols(
    name = "verilog_y_moved",
    src = "verilog.tab.cc",
    out = "verilog-moved.tab.cc",
)

record_recovered_syntax_errors(
    name = "verilog_y_final",
    src = "verilog-moved.tab.cc",
    out = "verilog-final.tab.cc",
)

cc_library(
    name = "verilog_y_cc",
    srcs = ["verilog-final.tab.cc"],
    hdrs = [
        "verilog.tab.hh",
        "verilog_parse_interface.h",
    ],
    copts = select({
        "@platforms//os:windows": [],
        "//conditions:default": [
            "-Wno-implicit-fallthrough",
            "-Wno-type-limits",
            "-Wno-unreachable-code",
        ],
    }),
    deps = [
        ":verilog_token_enum",
        "//common/parser:bison_parser_common",
        "//common/parser:parser_param",
        "//common/text:tree_utils",
        "//common/util:casts",
        "//common/util:logging",
        "//verilog/CST:DPI",
        "//verilog/CST:declaration",
        "//verilog/CST:expression",
        "//verilog/CST:functions",
        "//verilog/CST:module",
        "//verilog/CST:parameters",
        "//verilog/CST:port",
        "//verilog/CST:type",
        "//verilog/CST:verilog_nonterminals",
        "//verilog/CST:verilog_treebuilder_utils",
    ],
)

cc_library(
    name = "verilog_parser",
    srcs = ["verilog_parser.cc"],
    hdrs = ["verilog_parser.h"],
    deps = [
        ":verilog_y_cc",  # fixdeps: keep
        "//common/parser:bison_parser_adapter",
        "//common/parser:parse",
        "//common/parser:parser_param",
        "//common/util:value_saver",
        "@com_google_absl//absl/flags:flag",
    ],
    alwayslink = 1,
)

cc_library(
    name = "verilog_lexical_context",
    srcs = ["verilog_lexical_context.cc"],
    hdrs = ["verilog_lexical_context.h"],
    deps = [
        ":verilog_token_enum",
        "//common/text:token_info",
        "//common/text:token_stream_view",
        "//common/util:logging",
        "//common/util:with_reason",
    ],
)

cc_test(
    name = "verilog_parser_unittest",
    size = "small",
    srcs = ["verilog_parser_unittest.cc"],
    deps = [
        ":verilog_parser",
        ":verilog_token_enum",
        "//common/parser:bison_parser_common",
        "//common/parser:parser_test_util",
        "//common/text:constants",
        "//common/text:symbol",
        "//common/text:token_info",
        "//common/text:token_info_test_util",
        "//verilog/CST:verilog_nonterminals",
        "//verilog/analysis:verilog_analyzer",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "verilog_lexical_context_test",
    srcs = ["verilog_lexical_context_test.cc"],
    deps = [
        ":verilog_lexical_context",
        ":verilog_parser",
        ":verilog_token_enum",
        "//common/text:text_structure",
        "//common/text:token_info",
        "//common/text:token_stream_view",
        "//common/util:logging",
        "//verilog/analysis:verilog_analyzer",
        "@com_google_absl//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_library(
    name = "verilog_token_classifications",
    srcs = ["verilog_token_classifications.cc"],
    hdrs = ["verilog_token_classifications.h"],
    deps = [
        ":verilog_token_enum",
    ],
)

cc_test(
    name = "verilog_token_classifications_test",
    srcs = ["verilog_token_classifications_test.cc"],
    deps = [
        ":verilog_token_classifications",
        ":verilog_token_enum",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_library(
    name = "verilog_token",
    srcs = ["verilog_token.cc"],
    hdrs = ["verilog_token.h"],
    deps = [
        ":verilog_parser",
        ":verilog_token_enum",
        "@com_google_absl//absl/strings",
    ],
)
