当前位置: 首页 > news >正文

关于域名用于非网站用途做网站 租服务器

关于域名用于非网站用途,做网站 租服务器,网站企业模板,网站顶部伸缩广告antlr 语言 库我是一名语言工程师#xff1a;我使用多种工具来定义和处理语言。 在其他工具中#xff0c;我使用ANTLR#xff1a;它简单#xff0c;灵活#xff0c;可以围绕它进行构建。 但是我发现自己围绕ANTLR为不同的项目重建了类似的工具。 我看到两个问题#xff… antlr 语言 库 我是一名语言工程师我使用多种工具来定义和处理语言。 在其他工具中我使用ANTLR它简单灵活可以围绕它进行构建。 但是我发现自己围绕ANTLR为不同的项目重建了类似的工具。 我看到两个问题 ANTLR是一个非常好的构建基块但是仅使用ANTLR并不能做很多事情价值在于我们可以在AST上进行的处理而且我看不到ANTLR周围的图书馆生态系统 ANTLR不会产生语法的元模型如果没有就很难围绕ANTLR构建通用工具 让我解释一下 对于具有EMF经验的人对于每个语法我们基本上都需要一个等效的Ecore。 对于其他请阅读下一段 为什么我们需要一个元模型 假设我想构建一个通用库以根据ANTLR生成的AST生成XML文件或JSON文档。 我该怎么办 好吧给定一个ParseRuleContext我可以获取规则索引并找到名称。 我为Python语法生成了解析器并提供了一些示例因此让我们看一下如何使用实际的类 Python3Parser.Single_inputContext astRoot pythonParse(...my code...); String ruleName Python3Parser.ruleNames[astRoot.getRuleIndex()]; 好。 现在假设我想将所有终端作为属性添加并将所有非终端作为子节点添加到XML节点产生的Single_inputContext中。 让我们看一下类Single_inputContext public static class Single_inputContext extends ParserRuleContext {public TerminalNode NEWLINE() { return getToken(Python3Parser.NEWLINE, 0); }public Simple_stmtContext simple_stmt() {return getRuleContext(Simple_stmtContext.class,0);}public Compound_stmtContext compound_stmt() {return getRuleContext(Compound_stmtContext.class,0);}public Single_inputContext(ParserRuleContext parent, int invokingState) {super(parent, invokingState);}Override public int getRuleIndex() { return RULE_single_input; }Overridepublic void enterRule(ParseTreeListener listener) {if ( listener instanceof Python3Listener ) ((Python3Listener)listener).enterSingle_input(this);}Overridepublic void exitRule(ParseTreeListener listener) {if ( listener instanceof Python3Listener ) ((Python3Listener)listener).exitSingle_input(this);} } 在这种情况下我想 使用NEWLINE作为属性 将simple_stmt和compound_stmt用作子项 我应该得到这样的东西 Single_input NEWLINES...Simple_stmt.../Simple_stmtCompund_stmt.../Compunt_stmt /root 好。 对我来说看课并识别这些元素非常容易但是我如何自动做到这一点呢 反思显然您会思考。 是。 那行得通。 但是如果我们有多个元素怎么办 参加本课 public static class File_inputContext extends ParserRuleContext {public TerminalNode EOF() { return getToken(Python3Parser.EOF, 0); }public List NEWLINE() { return getTokens(Python3Parser.NEWLINE); }public TerminalNode NEWLINE(int i) {return getToken(Python3Parser.NEWLINE, i);}public List stmt() {return getRuleContexts(StmtContext.class);}public StmtContext stmt(int i) {return getRuleContext(StmtContext.class,i);}public File_inputContext(ParserRuleContext parent, int invokingState) {super(parent, invokingState);}Override public int getRuleIndex() { return RULE_file_input; }Overridepublic void enterRule(ParseTreeListener listener) {if ( listener instanceof Python3Listener ) ((Python3Listener)listener).enterFile_input(this);}Overridepublic void exitRule(ParseTreeListener listener) {if ( listener instanceof Python3Listener ) ((Python3Listener)listener).exitFile_input(this);} } 现在方法NEWLINE和stmt返回列表。 您可能还记得一般而言泛型在Java中不能很好地与反射结合使用。 在这种情况下我们很幸运因为有一个解决方案 Class clazz Python3Parser.File_inputContext.class; Method method clazz.getMethod(stmt); Type listType method.getGenericReturnType(); if (listType instanceof ParameterizedType) {Type elementType ((ParameterizedType) listType).getActualTypeArguments()[0];System.out.println(ELEMENT TYPE elementType); } 这将打印 元素类型类me.tomassetti.antlrplus.python.Python3Parser $ StmtContext 因此我们也可以介绍泛型。 好的使用反射并不理想但是我们可以从中提取一些信息。 我不是100肯定会足够但是我们可以开始。 元模型应该如何 为了定义元模型我不会尝试任何幻想。 我将使用经典模式它是EMF的基础它与MPS中可用的模式相似。 我将添加一种名为Package或Metamodel的容器。 包中将列出几个实体。 我们也可以将其中一个实体标记为根实体。 每个实体将具有 一个名字 可选的父实体从其继承属性和关系 属性列表 关系列表 每个属性将具有 一个名字 从原始类型中选择的一种类型。 实际上我希望只使用String和Integers。 将来可能枚举 多个1个或多个 每个关系将具有 一个名字 种类 包含或引用 。 现在AST只知道容器 但是稍后我们可以实现符号解析和模型转换在那个阶段我们将需要引用 目标类型另一个实体 多个1个或多个 下一步 我将开始构建元模型然后再利用该元模型构建通用工具。 通常还需要执行其他操作 转换我通常从ANTLR获得的AST是由我如何表达语法以获得可分析的内容决定的。 有时我还必须进行一些重构以提高性能。 我想在解析后转换AST以更接近语言的逻辑结构。 取消编组我想从AST进行测试 符号解析这绝对不是一件容易的事因为我发现为Java构建符号求解器 是的我知道有些人在想 只需使用Xtext即可 。 虽然我喜欢EMFXtext建立在它上面但是它的学习曲线陡峭我看到很多人对此感到困惑。 我也不喜欢OSGi如何与非OSGi世界一起玩。 最终Xtext带有很多依赖项。 别误会我认为Xtext在很多情况下都是一个了不起的解决方案。 但是有些客户更喜欢精益方法。 对于有意义的情况我们需要一种替代方法。 我认为它可以建立在ANTLR之上但是还有很多工作要做。 几年前我为.NET构建了类似的东西并将其称为NetModelingFramework 。 翻译自: https://www.javacodegeeks.com/2016/05/need-generic-library-around-antlr-using-reflection-build-metamodel.htmlantlr 语言 库
http://www.zqtcl.cn/news/506902/

相关文章:

  • 烟台网站制作公司如何注册国外网站
  • discuz企业网站网站可以做音频线吗
  • 怎样制作网站教程哪家好制作网页的的网站
  • 网站没有织梦后台无锡seo公司网站
  • 哈尔滨住房和城乡建设厅网站公司网站建设 费用入账
  • 网站图片缩略图t恤图案设计网站
  • 对招聘网站页面设计做建议网站流量 转化率
  • 怎么样做网站注册量郴州市北湖区
  • 山东企业展厅设计公司济南网站建设优化公司
  • 什么网站免费做游戏工艺品外贸订单网
  • 免费推广网站制作网站设计的技术有
  • 深圳电商网站建设高校学风建设专栏网站
  • 品牌网站建设 2蝌蚪小三网合一的网站怎么做
  • 对二次网站开发的认识wordpress修改图片大小
  • 电商网站项目建设个人网站空间收费
  • 官方网站制作思路樟木头东莞网站建设
  • 怎么寻找做有益做网站的客户大连网站推广
  • 湖南网站开发企业excel网站建设
  • 安康网站建设技巧腾讯建设网站视频下载
  • 如何能让企业做网站的打算中企动力做网站贵吗
  • wordpress 空间常州seo
  • 网站负责人备案采集照具体要求湛江网吧
  • 长春建站模板制作php网站空间购买
  • 网站域名到期怎么办食品包装设计的介绍
  • 建设网站专栏台州cms模板建站
  • 网站建设套餐方案湛江网站如何制作
  • wordpress网站怎么打开西安企业做网站多少钱
  • 电子商务网站建设的实训报告网页美工设计夏霍
  • 在一呼百应上做网站行吗江西省住房和城乡建设厅的网站
  • 对百度网站进行分析山水人家装饰公司