首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏程序人生

    再探 ParserParser Combinator

    如果大家对解析器还知之甚少,可以看我之前的文章《如何愉快地写个小parser》,以及 A Guide to Parsing: Algorithms and Terminology [3],它是对各种 parser Parser Combinator 是和 Parser Generator 平行的概念。 前文说过,用 parser combinator 的感觉就像搭积木,比如要解析 Hello, world!,可以写三个小 parser,然后将其组合起来。如下图: ? 然而我自己写的两种不同的 policy parser,实测结果咣咣打脸。pest 做的 parser 对 policy 表达式的处理速度在 4us 左右,而 nom 则超过了 5us。 将新的 parser 应用在 Elixir 中 最终我使用 rustler [9] 把两个优化后的 parser 集成到 Elixir 中,然后用 benchee 测试了一下: ?

    2.8K10发布于 2021-02-26
  • 来自专栏简易现代魔法

    Parser Combinator

    至于下面的 >> 符号则接收两个 parser,先尝试运行前面的 parser,如果成功了,就丢弃返回值,并使用后一个 parser 来解析,如果后面的 parser 也成功了则返回后一个 parser 它依次使用第一个、第三个、第二个 parser 来解析文本,当三个 parser 都成功解析时,返回第三个 parser 的返回值,否则解析失败。 // defined inside Parser[A] trait def flatMap[B](func: A => Parser[B]): Parser[B] = Parser(state => [A] trait def or[B >: A](other: => Parser[B]): Parser[B] = Parser(state => // run first parser on 比如 parser combinator 可以先组合出解析整数的 parser、解析出浮点数的 parser 等,然后这些 parser 都可以在其他不同的具体需求中使用。

    1.7K20发布于 2021-08-10
  • 来自专栏李维亮的博客

    { parser: babylon } is deprecated; we now treat it as { parser: babel }.

    npm run dev 错误提示: { parser: "babylon" } is deprecated; we now treat it as { parser: "babel" }. isProduction) { code = prettier.format(code, { semi: false, parser: 'babylon' }) } //修改为: if (! isProduction) { code = prettier.format(code, { semi: false, parser: 'babel' }) }

    1.2K40发布于 2021-07-08
  • 来自专栏01ZOO

    DSL parser 和 PromQL

    DSL parser 和 PromQL 这是promql的学习笔记,从promql的代码学习中,希望学习到的是:如何实现一个像promql的parser 先看两个算法题 1. qry := ng.newQuery(q, expr, start, end, interval) qry.q = qs return qry, nil } Parser 从上面的代码可以看出,所有 ParseExpr的实现在lex.go 和 parse.go里面 求值过程 lex (token/item 相当于上面的split操作) => parser (Expr, AST语法树) => engine ) parseExpr() (expr Expr, err error) // => for{ (p *parser) peek() item ==> (p *parser) expr() Expr 要比yacc生成的parser效率高,prometheus中promql的实现是手写,但是对metrics的解析则使用了yacc,而metrics的结构也比较简单,实现起来比较容易。

    3.3K120发布于 2019-07-07
  • 来自专栏Spark生态圈

    源码解析之Parser

    模块 Parser就是将SQL字符串切分成一个个Token,再根据一定语义规则解析为一棵语法树。 我们写的sql语句只是一个字符串而已,首先需要将其通过词法解析和语法解析生成语法树,Spark1.x版本使用的是scala原生的parser语法解析器,从2.x后改用的是第三方语法解析工具ANTLR4, = new SqlBaseParser(tokenStream) parser.addParseListener(PostProcessor) parser.removeErrorListeners toResult(parser) ... 通过Parser解析后的AST语法树如图所示: ?

    3K31发布于 2018-08-29
  • 来自专栏码匠的流水账

    聊聊puma的Parser

    序 本文主要研究一下puma的Parser Parser puma/puma/src/main/java/com/dianping/puma/parser/Parser.java public interface Parser extends LifeCycle { BinlogEvent parse(ByteBuffer buf, PumaContext context) throws IOException ; } Parser继承了LifeCycle接口,它定义了parse方法,解析ByteBuffer到BinlogEvent DefaultBinlogParser puma/puma/src/main/ Parser { private final Logger logger = LoggerFactory.getLogger(DefaultBinlogParser.class); private ()先实例化对应的BinlogEvent,然后通过event.parse(buf, context, header)进行解析 doc Parser

    43440发布于 2020-06-04
  • 来自专栏闵开慧

    URI was not reported to parser for entity

     org.xml.sax.SAXParseException: URI was not reported to parser for entity [document] at gnu.xml.aelfred2 applicationContext.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Parser Caused by:  org.springframework.beans.factory.BeanDefinitionStoreException: Parser configuration applicationContext.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Parser Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Parser configuration exception

    92780发布于 2018-03-30
  • 来自专栏Reck Zhang

    LeetCode 0385 - Mini Parser

    Mini Parser Desicription Given a nested list of integers represented as a string, implement a parser

    58540发布于 2021-08-11
  • 来自专栏码匠的流水账

    聊聊puma的Parser

    序 本文主要研究一下puma的Parser OIP (14).jpeg Parser puma/puma/src/main/java/com/dianping/puma/parser/Parser.java public interface Parser extends LifeCycle { BinlogEvent parse(ByteBuffer buf, PumaContext context ) throws IOException; } Parser继承了LifeCycle接口,它定义了parse方法,解析ByteBuffer到BinlogEvent DefaultBinlogParser implements Parser { private final Logger logger = LoggerFactory.getLogger(DefaultBinlogParser.class ()先实例化对应的BinlogEvent,然后通过event.parse(buf, context, header)进行解析 doc Parser

    66700发布于 2020-06-02
  • 来自专栏前端精读评论

    精读《手写 JSON Parser

    好在有人已经帮忙做了这件事,本周我们一起精读这篇 JSON Parser with Javascript 文章吧,再温习一遍大学时编译原理相关知识。 实现 Parser 首先实现一个基本结构: function fakeParseJSON(str) { let i = 0; // TODO } i 表示访问字符的下标,当 i 走到字符串结尾表示遍历结束 回溯》 精读《手写 SQL 编译器 - 语法树》 精读《手写 SQL 编译器 - 错误提示》 精读《手写 SQL 编译器 - 性能优化之缓存》 精读《手写 SQL 编译器 - 智能提示》 syntax-parser

    80620编辑于 2022-03-14
  • 来自专栏skyyws的技术专栏

    Calcite parser config介绍

    SqlParser.config() .withLex(Lex.BIG_QUERY) .withConformance(SqlConformanceEnum.BIG_QUERY); 小结 基本到这里Calcite得parser

    2.8K50编辑于 2022-11-21
  • 来自专栏一个会写诗的程序员的博客

    ClickHouse 的 Parser与Interpreter

    Parser和Interpreter是非常重要的两组接口: Parser分析器负责创建AST对象; Interpreter解释器则负责解释AST,并进一步创建查询的执行管道。 Parser分析器可以将一条SQL语句以递归下降的方法解析成AST语法树的形式。 不同的SQL语句,会经由不同的Parser实现类解析。

    1.4K30发布于 2021-06-29
  • 来自专栏纸上得来终觉浅

    http_parser源码解读

    把源码中的头文件http_parser.h和源码http_parser.c直接拷贝到项目中(https://github.com/nodejs/http-parser),然后一起编译即可; 我们写一个简单地测试例子 (http_parser*)malloc(sizeof(http_parser)); // 分配一个http_parser http_parser_init(parser, HTTP_REQUEST ); // 初始化parser为Request类型 parsed = http_parser_execute(parser, &parser_set, buf, strlen(buf)); // 执行解析过程 http_parser_execute(parser, &parser_set, buf, 0); // 信息读取完毕 free(parser); parser = NULL; } 使用主要分三步 Sets * `parser->http_errno` on error. */ size_t http_parser_execute(http_parser *parser,

    2.6K10发布于 2021-02-09
  • 来自专栏mazhen.tech

    TiDB SQL Parser 的实现

    我们可以在TiDB的Makefile文件中看到这个过程,先build goyacc工具,然后使用goyacc根据parser.y生成解析器parser.go: goyacc: $(GOBUILD) - o bin/goyacc parser/goyacc/main.go parser: goyacc bin/goyacc -o /dev/null parser/parser.y bin/goyacc -o parser/parser.go parser/parser.y 2>&1 ... goyacc是yacc的Golang版,所以要想看懂语法规则定义文件parser.y,了解解析器是如何工作的, 完成了语法规则文件 parser.y 的定义,就可以使用 goyacc 生成语法解析器: bin/goyacc -o parser/parser.go parser/parser.y 2>&1 TiDB 对 lexer 和 parser.go 进行了封装,对外提供 parser.yy_parser 进行SQL语句的解析: // Parse parses a query string to raw ast.StmtNode

    1.2K10编辑于 2023-11-24
  • 来自专栏小工匠聊架构

    Java - Jackson JSON Java Parser API

    ---- 概述 Jackson JSON Java Parser非常流行,并且也用于Spring框架。 Jackson JSON Parser API提供了将JSON转换为POJO对象的简便方法,并支持从JSON数据轻松转换为Map。 Jackson也支持泛型,并直接将它们从JSON转换为对象。

    1.3K20发布于 2021-08-17
  • 来自专栏前端精读评论

    93.精读《syntax-parser 源码》

    引言 syntax-parser 是一个 JS 版语法解析器生成器,具有分词、语法树解析的能力。 通过两个例子介绍它的功能。 第一个例子是创建一个词法解析器 myLexer: import { createLexer } from "syntax-parser"; const myLexer = createLexer([ 第二个例子是创建一个语法解析器 myParser: import { createParser, chain, matchTokenType, many } from "syntax-parser"; syntax-parser 还提供了其他几个有用的函数,比如 many optional 分别表示匹配多次和匹配零或一次。 看下面: function findNextMatchNodes(node: Node, parser: Parser): MatchNode[] { const nextMatchNodes: MatchNode

    84720编辑于 2022-03-14
  • 来自专栏忽如寄的前端周刊

    cookie-parser项目源码阅读

    cookie-parser相信使用过Express的人肯定使用过,cookie-parser是一个Express解析cookie的中间件,其中关于signed cookie的疑问可以在 What are req本质是inComingMessage,cookie-parser所做的工作是将cookie从header中转移到req中,并且转化为json对象。 大神片段: var secrets = ! * cookie-parser * Copyright(c) 2014 TJ Holowaychuk * Copyright(c) 2015 Douglas Christopher Wilson

    83120发布于 2019-07-25
  • 来自专栏程序人生

    如何愉快地写个小parser

    用javascript/jison做parser有什么好处呢? 上文所述的parser其实都是parser generator,generate出来的代码都是不可compose的,你写一个SQL parser,不能说先写一个select的parser,然后再写一个create table的parser,把两个compose起来,就是支持select和create的parser。 在parsec里,你可以从一个很细力度的parser写起,一路将其compose成一个非常复杂的parser。 注:不少同学还没搞清楚parser和compiler的区别…

    3.8K100发布于 2018-03-28
  • 来自专栏java一日一条

    Jsoup代码解读之四-parser(上)

    作为Java世界最好的HTML 解析库,Jsoup的parser实现非常具有代表性。这部分也是Jsoup最复杂的部分,需要一些数据结构、状态机乃至编译器的知识。 在Jsoup(包括类似的HTML parser)里,只做了Lex(词法分析)、Parse(语法分析)两步,而HTML parse最终产出结果,就是DOM树。

    1K10发布于 2018-09-19
  • 来自专栏donghui的博客

    Jenkins Log Parser Plugin使用说明

    官方wiki:https://wiki.jenkins-ci.org/display/JENKINS/Log+Parser+Plugin 插件概要信息: 解析控制台输出,高亮显示error 描述: log-parser插件解析Jenkins构建生成的控制台日志。

    3.2K20发布于 2019-04-19
领券