蛋疼的业务功能、蛋疼的流程、蛋疼的需求变更.....
彻底地被折磨得不成人样,更加让我无法忍受的是,看着大家代码无数的圈复杂度,一层层地写if、else等逻辑处理语句,来进行控制业务功能的,但是被动的是,你就再怎么细心,也不可能覆盖到所有的测试用例。
这里讲了一个领域的,是定义人类-》删除-》责骂-》剔除-》拥抱,编写g4文件
grammar PersonableGrammar; prog: stat+ ; stat: expr NEWLINE? # printExpr | NEWLINE # blank ; expr: DEF ID # DefinePerson | REM ID # RemovePerson | BLAME ID # BlamePerson | KICK ID # KickPerson | HUG ID # HugPerson ; //people actions DEF : 'define' ; REM : 'remove' ; BLAME: 'blame' ; HUG: 'hug' ; ID : [a-zA-Z]+ ; INT : [0-9]+ ; NEWLINE:'\r'? '\n' ; WS : [ \t]+ -> skip ; // toss out whitespace LINE_COMMENT : '//' .*? '\r'? '\n' -> skip ; // Match "//" stuff '\n'
使用antlrwork生成visitor,实现其接口
public class PersonableVistorImpl extends PersonableGrammarBaseVisitor{ ArrayList<String> personList = new ArrayList<String>(); @Override public String visitPrintExpr(@NotNull PersonableGrammarParser.PrintExprContext ctx) { String value = String.valueOf(visit(ctx.expr())); System.out.println(value); return value; } @Override public String visitDefinePerson(@NotNull PersonableGrammarParser.DefinePersonContext ctx) { String value = String.valueOf(ctx.ID()); System.out.println("++ Defining "+value); personList.add(value); return personList.toString(); } @Override public Object visitRemovePerson(@NotNull PersonableGrammarParser.RemovePersonContext ctx) { String value = String.valueOf(ctx.ID()); personList.remove(value); return personList.toString(); } @Override public String visitBlamePerson(@NotNull PersonableGrammarParser.BlamePersonContext ctx) { String value = String.valueOf(ctx.ID()); if (!personList.contains(value)){ System.out.println("++ You must define a person before blaming him or her."); return personList.toString(); } //do something to blame person System.out.println("++ It's all "+value+"'s fault."); return personList.toString(); } @Override public String visitHugPerson(@NotNull PersonableGrammarParser.HugPersonContext ctx) { String value = String.valueOf(ctx.ID()); if (!personList.contains(value)){ System.out.println("++ You must define a person before Hugging him or her."); return personList.toString(); } //do something to hug person System.out.println("Giving " +value +" a hug."); return personList.toString(); } }
相关推荐
ANTLR4是一种强大的解析器生成器,广泛用于构建语言、工具和框架。它能够读取、处理、执行或翻译结构化文本或二进制文件。在本项目“基于ANTLR4的CMM语言编译器”中,开发人员使用ANTLR4来创建了一个针对CMM(可能是...
它广泛应用于构建语言、工具和框架,从脚本语言和配置文件到DSL(领域特定语言)和嵌入式语法。ANTLR 4生成的解析器基于LL(*)解析算法,具有强大的错误恢复和错误报告能力,使其在处理语法错误时具有更高的灵活性。 ...
Java Antlr 4 是一个强大的解析工具,用于生成解析器和词法分析器,它使得开发者可以轻松地处理各种语言的语法。Antlr 4 支持多种编程语言,包括 Java,C#,Python,JavaScript 等,而在这个“java Antlr 4 语法文件...
antlr4权威指南,适合想要构建自己的语言的同学,使用antlr4构建更方便
在本课程设计中,主题是“基于Antlr4的Hive SQL解析”,这涉及到了两个主要的技术领域:Antlr4和Hive SQL。Antlr4是一个强大的解析工具,用于生成解析器和词法分析器,它能处理各种语言的语法,包括SQL。而Hive SQL...
4. **运行示例**:在"hello-antlr4"目录下,可能有一个简单的Java或Python程序,用来驱动ANTLR4生成的解析器和词法分析器。这个程序会读取输入(比如标准输入或文件),进行词法分析和语法解析,然后可能打印出解析...
5. **目标语言支持**:ANTLR 4支持多种目标语言,包括Java、C#、Python、JavaScript等,生成的解析器可以在这些语言环境中运行。 6. **可视化调试**:ANTLR 4提供了一个名为ANTLRWorks的图形化调试工具,可以直观地...
此外,ANTLR 4支持多种编程语言作为目标代码,如Java、C++、Python等,这意味着它可以在不同的开发环境中被应用。 在学习ANTLR 4的过程中,了解如何设计高效的语法文件是至关重要的。语法文件是ANTLR 4解析过程的...
本书是第一本领域专用语言(DSL)的实战类图书,它面向真正的实践者,是一本让奋战在开发第一线的实干家备感实用的专著! 《领域专用语言实战》基于一系列JVM语言(Java、Ruby、Groovy、Scala和Clojure),分析了...
总结起来,"antlr4-antlr4.zip"是一个用于Go语言的ANTLR4解析器生成器的初期版本,它为开发者提供了强大的语言解析能力,可用于构建各类解析相关工具和应用。开发者可以借此深入学习解析理论,实践语言解析技术,并...
赠送jar包:antlr4-runtime-4.2.jar; 赠送原API文档:antlr4-runtime-4.2-javadoc.jar; 赠送源代码:antlr4-runtime-4.2-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.2.pom; 包含翻译后的API文档:...
ANTLR 是一个强大的解析器生成器,常用于构建语言、工具和框架。它特别适用于解析结构化文本或二进制文件,比如编程语言、配置文件、通信协议等。ANTLR 支持多种目标语言,如Java、C#、Python等,使得生成的解析器...
ANTLR4在编译原理领域具有重要地位,因为它能够自动生成解析器和词法分析器,使得开发者无需从零开始构建这些复杂组件。 ANTLR4的核心功能包括: 1. **语法定义**:ANTLR4支持基于EBNF(扩展巴科斯范式)的语法...
总之,深入学习ANTLR4的源码,不仅可以帮助我们成为ANTLR4的专家,也能加深对解析理论、编译器构造和语言设计的理解。这是一项有价值且富有挑战性的任务,对于任何从事相关领域工作的人来说都是一个宝贵的资源。
ANTLR4支持多种目标语言,如Java、C#、Python等,使得生成的解析器可以跨平台运行。 在编译原理的学习中,ANTLR4扮演了核心角色。编译器是将高级语言转换为机器语言的程序,这一过程分为词法分析、语法分析、语义...
总之,"Antlr4 C++ 计算器"是一个学习ANTLR4和语言解析技术的好起点,它展示了如何使用ANTLR4生成的解析器和词法分析器在C++环境中解析和执行数学表达式。通过深入理解和实践这个项目,你可以提升对编译原理和语言...
antlr4权威指南中文版,原书作者terence Parr,清晰版本
ANTLR 4是ANTLR系列的最新版本,它提供了对现代编程语言语法模式的全面支持,并具有强大的错误恢复机制。 学习ANTLR 4的参考手册时,首先需要了解的是语言、语法、解析树、词法单元和解析器的基本概念。语言由一...