Java 使用ANTLR语法的Verilog解析

Java 使用ANTLR语法的Verilog解析,java,parsing,antlr,verilog,antlr4,Java,Parsing,Antlr,Verilog,Antlr4,我正在尝试用Java创建一个解析器(使用Netbeans),它可以接收任意的Verilog文件作为输入,并生成一个包含gates的网络列表作为输出。不必优化网络列表 我有ANTLR语法文件 然而,我并不十分确定如何将它集成到我的Java程序中 例如,如果我有以下Verilog文件作为输入 module and3(output out, input in1, in2,in3); reg r_out; assign out = r_out; always@(in1, in2, in3)

我正在尝试用Java创建一个解析器(使用Netbeans),它可以接收任意的Verilog文件作为输入,并生成一个包含gates的网络列表作为输出。不必优化网络列表

我有ANTLR语法文件

然而,我并不十分确定如何将它集成到我的Java程序中

例如,如果我有以下Verilog文件作为输入

module and3(output out, input in1, in2,in3);
  reg r_out;
  assign out = r_out;
  always@(in1, in2, in3)
    begin
      case({in3,in2,in1})
        000: out = 0;
        001: out = 1;
        010: out = 1;
        011: out = 1;
        100: out = 0;
        101: out = 1;
        110: out = 0;
        111: out = 1;
        default: out = 0;
      endcase
    end
endmodule
我想确定输入和输出端口的名称及其大小。我还想确定always块、case语句块以及case语句中的每个赋值

因此,我的疑问是:

1) 如何将其集成到java程序中

2) 如何使用这个Verilog语法文件并读取上面提到的Verilog代码来识别输入、输出、case语句和assign语句


谢谢

我最近解决了一个类似的任务。我开始为Verilog创建一个IntelliJ插件,使用与ANTLR相同的语法文件。目前,它成功地解析了Verilog文件,并进行了一些突出显示/完成等操作

这是我的密码


首先,我使用一些ANTLR工具(嵌入Idea的ANTLR插件中)生成ANTLR AST树,然后通过我最近解决了一个类似的任务,将该树调整为IntelliJ的AST格式(PSI树)。我开始为Verilog创建一个IntelliJ插件,使用与ANTLR相同的语法文件。目前,它成功地解析了Verilog文件,并进行了一些突出显示/完成等操作

这是我的密码


首先,我使用一些ANTLR工具(嵌入Idea的ANTLR插件中)生成ANTLR AST树,然后通过

将该树调整为IntelliJ的AST格式(PSI树)。您试图编写一个综合Verilog的编译器。解析器只是整个工作的一小部分——即使您编写了自己的语法文件,它也只占您必须投入的全部工作的百分之几。如果您真的想继续,您的第一个(小)步骤是从Verilog描述生成AST。从ANTLR网站上的非Verilog示例(C或更简单的东西)开始;如果你能创建和操作AST,那将是一个很好的起点。你正在尝试编写一个综合Verilog的编译器。解析器只是整个工作的一小部分——即使您编写了自己的语法文件,它也只占您必须投入的全部工作的百分之几。如果您真的想继续,您的第一个(小)步骤是从Verilog描述生成AST。从ANTLR网站上的非Verilog示例(C或更简单的东西)开始;如果您可以创建和操作AST,那将是一个很好的起点。