【Vue】集成Antlr4

devtools/2025/2/21 13:30:25/

1.下载.g4文件

下载地址:https://download.csdn.net/download/qq_42454367/90396095

2.安装Antlr

(1)使用以下命令安装依赖

pnpm install antlr4ng
pnpm install --save-dev antlr4ng-cli

(2)在package.json文件中配置

"scripts": {..."antlr4ng": "antlr4ng -Dlanguage=TypeScript -o src/assets/antlr/ -visitor -listener -Xexact-output-dir src/assets/antlr/Java.g4"},

其中,-Dlanguage为要生成的文件类型 ,**-o src/assets/antlr/**为生成的目录,src/assets/antlr/Java.g4为.g4文件的地址。
3)点击调试,选择antlr4ng运行。
在这里插入图片描

运行结束,将在目录生成对应文件。
在这里插入图片描述
(4)再在对应页面将其引入调用即可

import { CharStream, CommonTokenStream } from "antlr4ng";
import { JavaLexer } from "@/assets/antlr/JavaLexer";
import { JavaParser } from "@/assets/antlr/JavaParser";

在这里插入图片描述

3.出现的问题

(1)The requested module ‘/node_modules/.vite/deps/antlr4ng.js?v=aaef2d65’ does not provide an export named
在这里插入图片描述
在这里插入图片描述
解决方法:在对应位置加上type即可
在这里插入图片描述

4.示例代码

import * as antlr4ng from 'antlr4ng'
import { JavaLexer } from '@/assets/antlr/JavaLexer'
import {CompilationUnitContext,ImportDeclarationContext,JavaParser,PackageDeclarationContext,TypeDeclarationContext,
} from '@/assets/antlr/JavaParser'
import { JavaListener } from '@/assets/antlr/JavaListener'
import { JavaVisitor } from '@/assets/antlr/JavaVisitor'/*** 加载解析器** 该函数使用ANTLR解析器对Java代码进行解析它首先将代码字符串转换为字符流,* 然后通过JavaLexer生成词法分析结果,最后使用JavaParser生成语法树** @param code 待解析的Java代码字符串* @returns 返回解析生成的语法树*/
export const loadParser = (code: string) => {let charStream = antlr4ng.CharStream.fromString(code)let lexer = new JavaLexer(charStream)return new JavaParser(new antlr4ng.CommonTokenStream(lexer)).compilationUnit()
}/*** 获取包名** 此函数使用解析器构建代码的抽象语法树,然后遍历该树以找到并提取包声明* 如果找到包声明,它会进一步解析以构造完整的包名字符串** @param code 包含Java代码的字符串* @returns 提取到的包名字符串,如果没有找到包声明,则返回空字符串*/
export const getPackageName = (code: string) => {let packageName = ''// 获取包名的限定名称节点let qualifiedName = loadParser(code).packageDeclaration()?.qualifiedName()if (qualifiedName != null) {// 遍历限定名称中的标识符for (let i = 0; i < qualifiedName?.Identifier().length; i++) {if (i > 0) {packageName += '.'}packageName += qualifiedName.Identifier()[i]?.getText() || ''}}return packageName
}/*** 获取依赖信息** 该函数通过解析给定的代码字符串,提取出其中的依赖项* 主要用于代码分析,了解一个代码片段依赖于哪些外部模块或组件** @param code 需要解析的代码字符串* @returns 返回提取出的依赖项数组*/
export const getDependency = (code: string) => {return extractImports(loadParser(code), [])
}/*** 递归解析语法树*/
let extractImports = (tree: any, val: string[]) => {if (tree instanceof ImportDeclarationContext) {// 提取import语句val.push(tree.getText().replace(/^\s*import\s*/, ''))}// 递归遍历子节点for (let i = 0; i < tree.getChildCount(); i++) {extractImports(tree.getChild(i), val)}return val
}

http://www.ppmy.cn/devtools/160264.html

相关文章

【产品资料】陀螺匠·企业助手v1.8 产品介绍

陀螺匠企业助手是一套采用Laravel 9框架结合Swoole高性能协程服务与Vue.js前端技术栈构建的新型智慧企业管理与运营系统。该系统深度融合了客户管理、项目管理、审批流程自动化以及低代码开发平台&#xff0c;旨在为企业提供一站式、数字化转型的全方位解决方案&#xff0c;助力…

调用DeepSeek API接口:实现智能数据挖掘与分析

调用DeepSeek API接口:实现智能数据挖掘与分析 在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用D…

【前端框架】深入探讨 Vue 3 组件生命周期的变化和最佳实践

一、Vue 3 组件生命周期的变化 1. 生命周期钩子的更名与调整 在 Vue 2 中&#xff0c;组件生命周期钩子包括 beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy 和 destroyed。而在 Vue 3 中&#xff0c;部分钩子进行了更名&#xff0c;以…

深度优先搜索

1. 算法思想 DFS 通过递归或栈来实现&#xff0c;其过程如下&#xff1a; 从起始节点开始&#xff0c;访问该节点并标记为已访问。 选择一个未访问的邻接节点&#xff0c;继续深入探索。 如果当前节点没有未访问的邻接节点&#xff0c;则回溯到上一个节点。 重复上述过程&a…

【Linux】Socket编程—TCP

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…

在Windows系统中安装Open WebUI并连接Ollama

Open WebUI是一个开源的大语言模型&#xff08;LLM&#xff09;交互界面&#xff0c;支持本地部署与离线运行。通过它&#xff0c;用户可以在类似ChatGPT的网页界面中&#xff0c;直接操作本地运行的Ollama等大语言模型工具。 安装前的核心要求&#xff1a; Python 3.11&#…

【Golang学习之旅】Go 语言微服务架构实践(gRPC、Kafka、Docker、K8s)

文章目录 1. 前言&#xff1a;为什么选择Go语言构建微服务架构1.1 微服务架构的兴趣与挑战1.2 为什么选择Go语言构建微服务架构 2. Go语言简介2.1 Go 语言的特点与应用2.2 Go 语言的生态系统 3. 微服务架构中的 gRPC 实践3.1 什么是 gRPC&#xff1f;3.2 gRPC 在 Go 语言中的实…

UDP

UDP 是什么&#xff1f; 提供无连接的&#xff0c;尽最大努力的数据传输服务&#xff08;不保证数据传输的可靠性&#xff09; UDP 的特点有哪些&#xff1f; 1&#xff09;UDP 是无连接的&#xff1b; 2&#xff09;UDP 使用尽最大努力交付&#xff0c;即不保证可靠交付&am…