tree-sitter-java使用方法

news/2024/11/23 0:34:42/

获取动态链接库

前提条件:需启动docker

java-tree-sitter项目使用Docker来确保构建环境的一致性。在java-tree-sitter的构建过程中,Docker被用来创建一个包含所有必要依赖的环境,然后在这个环境中编译项目。这样可以确保无论你在哪里构建项目,都能得到相同的结果,避免了"在我机器上可以运行"的问题。

https://github.com/seart-group/java-tree-sitter/tree/v1.0.0

  1. 按ReadMe介绍,git clone 并下载所有的submodule
  2. mvn clean build
  3. 获得动态链接库:
    1. 在项目路径下执行: ./build.py -o libjava-tree-sitter path-to-tree-sitter-css path-to-tree-sitter-python …
    2. 默认名为 libjava-tree-sitter,后的参数是需要添加的语言库,可根据需要单选或多选

在 Mac 中生成的库后缀为 .dylib ,笔者得到 libjava-tree-sitter-cpp-c-java.dylib 文件。

引入依赖 & 编码

gradle配置文件中添加如下代码:

implementation 'ch.usi.si.seart:java-tree-sitter:1.0.0'

使用

@Test  
public void should_get_structure_feature_of_snippet_by_tree_sitter () {  System.load("/Users/author/libjava-tree-sitter-cpp-c-java.dylib");  String source = "Datum g_intbig_compress(PG_FUNCTION_ARGS)\n" +  "{\n" +  "    GISTENTRY* entry = (GISTENTRY*)PG_GETARG_POINTER(0);\n" +  "\n" +  "    if (entry->leafkey) {\n" +  "        GISTENTRY* retval = NULL;\n" +  "        ArrayType* in = DatumGetArrayTypeP(entry->key);\n" +  "        int4* ptr = NULL;\n" +  "        int num;\n" +  "        GISTTYPE* res = (GISTTYPE*)palloc0(CALCGTSIZE(0));\n" +  "\n" +  "        CHECKARRVALID(in);\n" +  "        if (ARRISEMPTY(in)) {\n" +  "            ptr = NULL;\n" +  "            num = 0;\n" +  "        } else {\n" +  "            ptr = ARRPTR(in);\n" +  "            num = ARRNELEMS(in);\n" +  "        }";  try (  Parser parser = new Parser(Language.CPP);  Tree tree = parser.parseString(source)  ) {  Node root = tree.getRootNode();  assertEquals(1, root.getChildCount());  assertEquals("translation_unit", root.getType());  assertEquals(0, root.getStartByte());  assertEquals(512, root.getEndByte());  Node function = root.getChild(0);  assertEquals("ERROR", function.getType());  assertEquals(14, function.getChildCount());  } catch (Exception ex) {  // ...  }  
}

http://www.ppmy.cn/news/777921.html

相关文章

HarmonyOS学习路之开发篇—数据管理(分布式文件服务)

分布式文件服务概述 分布式文件服务能够为用户设备中的应用程序提供多设备之间的文件共享能力,支持相同帐号下同一应用文件的跨设备访问,应用程序可以不感知文件所在的存储设备,能够在多个设备之间无缝获取文件。 基本概念 分布式文件 分布…

基于matlab检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离(附源码)

一、前言 此示例演示如何检测使用校准的立体摄像头拍摄的视频中的人物,并确定他们与摄像头的距离。 二、加载立体摄像机的参数 加载对象,这是使用应用程序或函数校准相机的结果。 三、创建视频文件阅读器和视频播放器 创建用于读取和显示视频的系统对…

解决:AttributeError module ‘time‘ has no attribute ‘clock‘

一、问题 在 Pycharm Python3.8 环境中,调用 time.clock() 报错:AttributeError: module ‘time’ has no attribute ‘clock’。 二、解决方法 原因是 Python3.8 不再支持time.clock,但在调用时依然包含该方法。可以用 time.perf_counter()…

达人评测酷睿i5 12490f和锐龙r5 5600x 选哪个好 i512490f和r55600x对比

锐龙5 5600X,6核心12线程,3MB二级缓存,32MB三级缓存,基准频率3.7GHz,最高加速4.6GHz,热设计功耗为65W 组装电脑选r5 5600x还是i5 12490f怎么搭配更合适这些点很重要 http://www.adiannao.cn/du i5 12490F…

达人评测 酷睿i5 12450h和锐龙r7 5700u选哪个好 i512450h和r75700u对比

R7 5700U 为 8 核 16 线程,1.8-4.3GHz,GPU 为 8 个计算单元,频率为 1.9GHz。 选i512450h还是r7 5700u这些点很重要http://www.adiannao.cn/dy i5 12450H采用Intel 7工艺4大核4小核设计,拥有8核心12线程,三级缓存为12M&…

软件工程——第9章面向对象方法学引论知识点整理

本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.当前最好的软件开发技术是? 2.面向对象的原则是什么? 3.人们把客观世界中的实体抽象为什么? 4.软件系统本质上…

回溯法解决地图填色问题

目录 回溯法 最大度优先 最少可选颜色优先 向前探测 随机产生不同规模的图,分析算法效率与图规模的关系(四色) 回溯法 回溯法的基本思想是采用递归和深度优先搜索的方法,尝试在一组可能的解中搜索出符合要求的解&#xff0c…

css,less,scss中的深度选择器,结合elementUi使用

css中深度选择器用到的是 >>>加类名 可以很方便的找到自己想要修改的样式 lees中用到 /deep/ 加类名 scss中用到::v-deep 加类名