
文章插图
package com.vivo.learn.sql;import java.util.HashMap;import java.util.Map;/** * 重写访问器规则,实现数据计算功能 * 目标: *1+2 => 1+2=3 *1+2*4 => 1+2*4=9 *1+2*4-5 => 1+2*4-5=4 *1+2*4-5+20/5 => 1+2*4-5+20/5=8 *(1+2)*4 => (1+2)*4=12 */public class LibExprVisitorImpl extends LibExprBaseVisitor<Integer> {// 定义数据Map<String,Integer> data = https://www.huyubaike.com/biancheng/new HashMap
package com.vivo.learn.sql;import org.antlr.v4.runtime.tree.ParseTree;import java.io.FileNotFoundException;import java.io.IOException;import org.antlr.v4.runtime.*;/** * 打印语法树 */public class TestLibExprPrint {// 打印语法树 input -> lexer -> tokens -> parser -> tree -> printpublic static void main(String args[]){printTree("E:\\smartloli\\hadoop\\sql-parser-example\\src\\main\\resources\\testCase.txt");}/*** 打印语法树 input -> lexer -> token -> parser -> tree* @param fileName*/private static void printTree(String fileName){// 定义输入流ANTLRInputStream input = null;// 判断文件名是否为空,若不为空,则读取文件内容,若为空,则读取输入流if(fileName!=null){try{input = new ANTLRFileStream(fileName);}catch(FileNotFoundException fnfe){System.out.println("文件不存在,请检查后重试!");}catch(IOException ioe){System.out.println("文件读取异常,请检查后重试!");}}else{try{input = new ANTLRInputStream(System.in);}catch(FileNotFoundException fnfe){System.out.println("文件不存在,请检查后重试!");}catch(IOException ioe){System.out.println("文件读取异常,请检查后重试!");}}// 定义词法规则分析器LibExprLexer lexer = new LibExprLexer(input);// 生成通用字符流CommonTokenStream tokens = new CommonTokenStream(lexer);// 语法解析LibExprParser parser = new LibExprParser(tokens);// 生成语法树ParseTree tree = parser.prog();// 打印语法树// System.out.println(tree.toStringTree(parser));// 生命访问器LibExprVisitorImpl visitor = new LibExprVisitorImpl();visitor.visit(tree);}}
经验总结扩展阅读
- 教你用canvas打造一个炫酷的碎片切图效果
- 不满情绪大爆发如何安抚
- 文静诗意的双胞胎名字 双胞胎名字大全
- 副机长工资多少钱一个月 收入高吗
- 40岁眼霜排行榜:雅诗兰黛、赫莲娜上榜,40岁如何选择眼霜
- 机长工资多少钱一个月 收入高不高
- 软件开发工程师一个月多少钱 工资待遇好吗
- 空姐工资一般是多少钱一个月 年终奖有多少
- 梦幻西游搬砖赚钱方式(梦幻西游搬砖如何月入3000)
- 2023年双鱼座爱情劫难 2023年双鱼座如何度过感情劫