使用Antlr4的TokenStreamRewriter修改内容

科技 2年前 阅读:6 评论:0

需求:在css中利用变量控造部门属性的值

项目中设置装备摆设antlr版本<dependency> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> <version>4.9.3</version> </dependency> 利用官方css.g4 demo生成api$ antlr4 -no-listener -visitor css.g4利用TokenStreamRewriter修改package css; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.TokenStreamRewriter; import org.antlr.v4.runtime.tree.ParseTree; public class Css { public static void main(String[] args) { CssLexer lexer = new CssLexer(CharStreams.fromString(".b { color: red; } .c { color: blue; }")); CommonTokenStream stream = new CommonTokenStream(lexer); CssParser parser = new CssParser(stream); ParseTree tree = parser.stylesheet(); EvalVisitor evalVisitor = new EvalVisitor(stream); evalVisitor.visit(tree); System.out.println(evalVisitor.rewriter.getText()); } } class EvalVisitor extends CssBaseVisitor<String> { TokenStreamRewriter rewriter; public EvalVisitor(CommonTokenStream tokenStream) { rewriter = new TokenStreamRewriter(tokenStream); } @Override public String visitExpr(CssParser.ExprContext ctx) { String text = ctx.getText(); if (text.equals("red")) { rewriter.replace(ctx.getStart(), ctx.getStop(), "#ff0000"); } return super.visitExpr(ctx); } }

完好代码:https://github.com/schizobulia/antlr4_demo/blob/main/src/main/java/css/Css.java

目前我司

在招高级前端、ios、android开发(完全长途)。大佬们有兴趣的发简历

邮箱:MjgzMzMyNDUyOEBxcS5jb20=

若是你喜好我的做品,请考虑赞助我,以连结它们的可持续性。

版权声明

本文仅代表作者观点,不代表木答案立场。

网友评论

本站会员尊享VIP特权,现在就加入我们吧!登录注册
登录
用户名
密码
验证码
若未跳转,可点击这里刷新重试
未知错误
注册
用户名
密码(至少8位)
确认密码
邮箱(请填写常用邮箱)
验证码
若未跳转,可点击这里刷新重试
未知错误
找回密码
用户名
邮箱
※ 重置链接将发送到邮箱
若未跳转,可点击这里刷新重试
未知错误