Java-具有语法的抽象语法树

asdfgggkgk:

我正在用正则表达式构建一个简单的语法解析器。它有效,但现在我想添加抽象语法树。但是我仍然不知道如何设置它。我包括了解析器。解析器获取一个字符串,并用词法分析器对其进行标记。
标记包括值和类型。知道如何设置节点以构建AST吗?

public class Parser {
    lexer lex;
    Hashtable<String, Integer> data = new Hashtable<String, Integer>();


    public Parser( String str){
       ArrayList<Token> token = new ArrayList<Token>();

       String[] strpatt = { "[0-9]*\\.[0-9]+", //0
                            "[a-zA-Z_][a-zA-Z0-9_]*",//1
                            "[0-9]+",//2
                            "\\+",//3
                            "\\-",//4
                            "\\*",//5
                            "\\/",//6
                            "\\=",// 7
                            "\\)",// 8
                            "\\("//9
                          };

        lex = new lexer(strpatt, "[\\ \t\r\n]+");
        lex.set_data(str);
    }
    public int peek() {
      //System.out.println(lex.peek().type);
      return lex.peek().type;
    }
    public boolean peek( String[] regex) {
      return lex.peek(regex);
    }
    public void set_data( String s) {
      lex.set_data(s);
    }
    public Token scan() {
      return lex.scan();
    }
    public int goal() {
      int ret = 0;
      while(peek() != -1) {
        ret = expr();
      }
      return ret;
    }


}


说:

当前,您只是在解析时进行评估:

ret = ret * term()

想到AST的最简单方法是,它只是另一种评估。如上所述,不是从数字子计算中生成数字结果,而是从子计算的描述中生成计算的描述。该描述以包含基本信息的小结构表示:

ret = BuildProductNode(ret, term());

也许

    ret = BuildBinaryNode(Product, ret, term());

这是一棵树,因为要传递的Node对象引用其他Node对象,而没有一个循环或具有两个不同父级的节点。

显然,上面遗漏了很多细节,尤其是Node对象的确切性质。但这是一个粗略的轮廓。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章