
parser
binling
这个作者很懒,什么都没留下…
展开
-
表达式文法以及parse实现
1.文法1)E->E+T2)E->E-T3)E->T4)T->T*F5)T->T/F6)T->F7)F->i8)F->(E)2.去左递归、提取左因子后的改写文法1) E -> TE'2) E'-> +TE' | -TE' | e3) T -> FT'3) T'-> *F | /F | e4) F -> int | (E)原创 2015-11-03 16:39:10 · 1379 阅读 · 0 评论 -
爬虫,索引,PageRank,搜索,综合例子
indexer 主要包含:html parser,word generator, url id generator,inverted index(keyword->[docId],docs table(url, id, refCount)word generator的职责是输入一个text文本,返回一个word iterable。具体参数有,最小word长度,exclude list,原创 2016-09-23 16:34:56 · 1428 阅读 · 0 评论 -
json parser
和xml parser类似三个主要对象datasourceparsertargetObjectparser在iterate datasource的时候碰到不同的字符相当于产生不同的事件,有不同的动作,parser会 维护一些状态,更新targetObject,用stack维护层级,栈顶是当前容器def parseJson(json): stack, key = [[]]原创 2015-10-10 18:43:42 · 861 阅读 · 0 评论 -
OO:XmlParser 网页分析和 爬虫
对象:DataSource, SAXParser, ContentHandler, DataTargetDataSource封装xml数据流,提供read接口char read()SAXPaser 通过DataSource读取数据,产生事件并且回调ContentHandler的事件处理方法parse(DataSource sourceXml, ContentHandler hand原创 2015-10-09 15:15:29 · 599 阅读 · 0 评论 -
Regular Expression实现
先贴代码package code_practice;import java.util.*;class Edge { int from, to, weight; public Edge(int from, int to, int w) { this.from = from; this.to = to; this.weight = w; }}class Digraph {原创 2015-11-01 21:12:33 · 579 阅读 · 0 评论 -
stream, parser, 文法的一些概念
stream就是个Iterable,最基础的unit是bit,对应二进制流,从二进制流到character流Iteralbe是encoding解决的问题,再往上一个层次是token流,或者word流1)基础的tokenize就是自然token,即按分隔符切割的,alphabet字符(a-z,1-9等)和非alphabet字符(空格,标点,括号等。2)自然token不一定是和合法的t原创 2015-11-04 17:45:27 · 497 阅读 · 0 评论 -
关于Iterable接口和 Iteraotor接口的关系和实现
Iterable是说这个对象支持iterate操作,是可iterate的,需要遍历的话,给你返回一个iterator进行遍历Iterator对应具体的一次遍历,核心数据是遍历指针Iterator 实现要点主要对象:flag: 标志当前是否有item 取出来了还未被取走current: 存放下一个itemboolean hasNext()如果fla原创 2015-11-13 14:32:55 · 446 阅读 · 0 评论 -
分词驱动的parser vs. meta character驱动
字符分为alphabet charactermeta character主框架就是分词,分出一个词做什么处理的问题,这个是根据当前的状态。而meta character主要就是决定状态。比如json parser,当分出一个词后,如果当前处在一个list的scope里,(之前出现过"[",还未出现"]"),那就parent.append(word),如果当前处在一个dict里,且在ke原创 2015-10-26 12:47:08 · 397 阅读 · 0 评论 -
一个完整的语法分析、词法分析例子——Universal Pasrser
需求:用户用formal notation指定语法、词法,然后可以匹配相应的文本。用法类似正则表达式,只需给出formal notation,不需要为每一种格式的文本单独写匹配器。formal notation主要是3个部分:1)BNF 列表 table:给出上下文无关文法的产生式规则,以及所有的符号(终端和非终端)2)起始符号 start3)终端符号Regular Express原创 2015-11-12 12:12:19 · 4533 阅读 · 0 评论 -
算术表达式的validation
经典的机遇单调栈的表达式求值时没有validate表达式是否正确的,1+2, 1 2 +都是可以evaluate出来的,因为它们的op栈和oprand栈都是一样的。和json validator一样,框架都是都是输入字符驱动的状态转移。合法的主要是保证:1)运算符和值交替出现,注意运算符可以首先出现但必须是+-,作为正负号2)最后必须是值值有2种:数和括号定义4个状原创 2015-11-12 01:19:59 · 356 阅读 · 0 评论 -
key-value pair列表parser
类似属性文件那样, key1 = value1, key = value2简练的算法,只区分word字符和分隔字符(空格, tab, 逗号,=等等),不需要处理key和vaue的分隔符(=)。就是parse word,tokenize,分词驱动,分出一个词来做什么操作的问题,就是考虑一点,作为key还是value。用一个key变量记录状态就好了,key是空则当前word是key, key有值,原创 2015-10-23 18:05:51 · 775 阅读 · 0 评论 -
json validator,流事处理,字符事件驱动,状态维护
语法字符驱动,状态判断、维护。参考leetcode isValidNumdef isValidJson(json): stack, inWord, inKey, inQuote, empty, metaChars, pair = [], False, False, False, True, '[]{},: \t', {'}': '{', ']': '['} for c in json:原创 2015-10-26 16:40:16 · 607 阅读 · 0 评论 -
爬虫中网页分析的几种技术
一般来说我们只抓取网页中的特定数据,比如抓取某人所有的blog,我们就只关心list 页面中文章列表那部分的链接和title有3中可以选技术来分析网页1)正则匹配2)一般字符串匹配content.substring(pattern, startIndex),一般是带有startIndex的substring,而不是每次都是从头匹配3) 基于sax的事件4)DOM + XPath原创 2015-10-20 16:57:33 · 4003 阅读 · 0 评论 -
StringTokenizer实现
OO分析,识别对象:源字符串str, 当前词起始指针start, 扫描指针i, 当前词word基本互动关系:1)当前指针在str范围且是字符i > 0 && str[i] != ' ',并且是第一个字符(i == 0) 或上一个字符是空格(str[i - 1] == ' '),则start = i2)当前指针是空格或者超界i == str.size() || str[i] ==原创 2015-10-08 17:25:29 · 398 阅读 · 0 评论 -
再谈Parser
Parser的作用就是把一个字符串(一维,流)parse成一个数据结构。Parser的写法大概有2种方式1)递归下降(recursive descend)2)事件驱动的状态机。状态就是一些表明当前状态的变量和最终要parse出的data structure。xml parser, json parser,key value pair parser, 都是第二种方法,其中所谓原创 2016-09-19 22:41:10 · 871 阅读 · 0 评论