Mryqu's Notes


  • 首页

  • 搜索
close

初探ANTLR

时间: 2013-07-03   |   分类: Tech     |   阅读: 96 字 ~1分钟
当前的项目是基于多维数据集市的RTOLAP财务系统,其中的公式使用ANTLR 3进行语法解析和编译。 此外看Hibernate源码的时候也接触到ANTLR,Hibernate使用ANTLR产生查询分析器。 ANTLR简介 ANTLR的全称是ANother Tool for LanguageRecognition,其前身是PCCTS,和YACC、LEX、JavaCC、Coco/R等工具一样,都是编译器的编译程序。 ANTLR对语法树构造、遍历和转换、错误修复和报告提供出色的支持,它为包括Java,C++,C#和Python在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器、解析器、编译器和转换器的框架。 ANTLR可以通过断言(Predicate)解决识别冲突;支持动作(Action)和返回值(ReturnValue)来;更棒的是,它可以根据输入自动生成语法树并可视化的显示出来。由此,计算机语言的翻译变成了一项普通的任务。 ANTLR是由旧金山大学的Terence Parr博士领导下完成的,最新版本为4.1。 编译器工作主要分有词法分析,语法分析,代码生成三个步骤。ANTLR分别提供了三个东西: 词法分析器(Lexer) 词法分析器又称为Scanner,Lexicalanalyser和Tokenizer。程序设计语言通常由关键字和严格定义的语法结构组成。编译的最终目的是将程序设计语言的高层指令翻译成物理机器或虚拟机可以执行的指令。词法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token),包括关键字、标识符、符号和操作符供语法分析器使用。 语法分析器(Parser) 编译器又称为Syntacticalanalyser。在分析字符流的时候,Lexer不关心所生成的单个Token的语法意义及其与上下文之间的关系,而这就是Parser的工作。语法分析器将收到的Tokens组织起来,并转换成为目标语言语法定义所允许的序列。 无论是Lexer还是Parser都是一种识别器,Lexer是字符序列识别器而Parser是Token序列识别器。他们在本质上是类似的东西,而只是在分工上有所不同而已。 抽象语法树遍历器 (Tree walker) 树分析器可以用于对语法分析生成的抽象语法树进行遍历,并能执行一些相关的操作,可以进行语义匹配生成代码。 ANTLR 3的Eclipse插件 ANTLR IDE用于ANTLR3的一个Eclipse插件。 支持ANTLR 3.0、3.1、3.2、3.3和3.4。 ANTLR启动器和调试器(仅限Java) ANTLR内建解析器。 代码格式化工具(Ctrl+Shift+F) 语法图(铁路图) 定制目标 自动生成资源 对语法文件中错误和告警自动标注 高级文本编辑器、代码选择(F3)和代码补全(Ctrl+Space) 对(Java、C#、Python和C等)目标语言自动语法高亮 标注生成的资源 高级字符串模板(StringTemplate)编辑器(*.st and *.stg) 高级语法单元测试(gUnit)编辑器(*.gunit and *.testsuite) 使用ANTLR生成代码的ANT设置 <property name="lib.dir" value="lib" /> <property name="gensrc.dir" value="gen-source/Java" /> <property name="parser.dir" value="/com/sas/yourgramarpackage"/> <target name="gen-source"> <mkdir dir="${gensrc.dir}/${parser.dir}" /> <antlr:antlr3 xmlns:antlr="antlib:org/apache/tools/ant/antlr" target="${src.dir}/${parser.dir}/YourGrammar.g" outputdirectory="${gensrc.dir}/${parser.dir}"> <classpath> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> </classpath> </antlr:antlr3> </target> 使用ANTLR生成代码的Maven设置 <build> <plugins> <plugin> <groupId>org.
阅读全文 »

博客链接(搜索、统计、数据挖掘)

时间: 2013-07-03   |   分类: DataScience     |   阅读: 25 字 ~1分钟
统计(侧重R) |Name|Blog|Weibo |—- |R-bloggers|http://www.r-bloggers.com/| |statMethods blog|http://statmethods.wordpress.com/| |谢益辉|http://yihui.name/|Weibo:@谢益辉 |刘思喆|http://www.bjt.name/|Weibo:@刘思喆 |邓一硕|http://yishuo.org/|Weibo:@邓一硕 |陈堰平|http://yanping.me/|Weibo:@平沙落雁 |邱怡轩|http://yixuan.cos.name/|Weibo:@解名缰 |魏太云|http://blog.cos.name/taiyun/|Weibo:@cloud_wei |陈丽云|http://www.loyhome.com/|Weibo:@cloudly |肖楠|http://www.road2stat.com/|Weibo:@road2stat |肖凯|http://xccds.github.io/|Weibo:@xccds |高涛|http://joegaotao.github.io/cn|Weibo: @三水成海 |陈刚|http://gossipcoder.com/| |李舰|http://jliblog.com/|Weibo:@lijian001 |熊熹|http://blog.cos.name/tracy/|Weibo:@熊熹91 |范建|http://blog.cos.name/fan/|Weibo:@thinkfan 搜索 百度搜索研发部官方博客 淘宝搜索技术 量子恒道官方博客

[Hadoop] 分布式缓存

时间: 2013-06-28   |   分类: BigData     |   阅读: 152 字 ~1分钟
一直在看分布式缓存,最近涉猎到Hadoop的分布式缓存,做个汇总以备后用。 adoop分布式缓存是Map-Reduce框架提供的用于缓存应用程序所需文件(文本文件、存档文件、Jar文件等)的工具。 应用程序通过URL(hdfs://或http://)指定通过JobConf进行缓存的文件。分布式缓存假定URL所指定的文件已经存在于Hadoop分布式文件系统或本地文件系统中并可被集群中所有机器访问到。Hadoop框架会在任何作业在节点执行之前将必须的缓存文件复制到任务节点以供使用。为了节省网络带宽,这些文件只会为每个作业复制一次,且归档类型的缓存文件会在任务节点中解压缩。分布式缓存能用于分发简单只读数据或文本文件及复杂文件(存档文件、Jar文件等)。归档文件(zip、tar和tgz/tar.gz文件)在任务节点中解压缩。Jar文件可选择加入任务的类路径,这是基本的软件分发机制。 分布式缓存跟踪缓存文件的修改时戳。很明显当作业执行时这些缓存文件不应被应用程序或外部修改。 下面的示例介绍了如何使用DistributedCache: 将所需文件复制到FileSystem: $ bin/hadoop fs -copyFromLocal lookup.dat /myapp/lookup.dat $ bin/hadoop fs -copyFromLocal map.zip /myapp/map.zip $ bin/hadoop fs -copyFromLocal mylib.jar /myapp/mylib.jar $ bin/hadoop fs -copyFromLocal mytar.tar /myapp/mytar.tar $ bin/hadoop fs -copyFromLocal mytgz.tgz /myapp/mytgz.tgz $ bin/hadoop fs -copyFromLocal mytargz.tar.gz /myapp/mytargz.tar.gz 设置应用程序的JobConf: JobConf job = new JobConf(); DistributedCache.addCacheFile(new URI("/myapp/lookup.dat"), job); DistributedCache.addCacheArchive(new URI("/myapp/map.zip", job); DistributedCache.addFileToClassPath(new Path("/myapp/mylib.jar"), job); DistributedCache.addCacheArchive(new URI("/myapp/mytar.tar", job); DistributedCache.addCacheArchive(new URI("/myapp/mytgz.tgz", job); DistributedCache.addCacheArchive(new URI("/myapp/mytargz.tar.gz", job); 在Mapper或Reducer中使用缓存的文件: public static class MapClass extends MapReduceBase implements Mapper{ private Path[] localArchives; private Path[] localFiles; public void configure(JobConf job) { // Get the cached archives/files File f = new File(".
阅读全文 »

嵌套的动态GemFire region研究

时间: 2013-06-28   |   分类: Cache     |   阅读: 154 字 ~1分钟
研究目的和结论 研究多级动态region是否可行,结论可行 研究嵌套region(一个region是另一个region的值)是否可行,结论可行 Java代码 import java.util.Set; import com.gemstone.gemfire.cache.Cache; import com.gemstone.gemfire.cache.CacheFactory; import com.gemstone.gemfire.cache.DynamicRegionFactory; import com.gemstone.gemfire.cache.Region; public class EmbededDynamicRegion { public static void main(String[] args) { System.out.println("\nConnecting to the distributed system and creating the cache."); Cache cache = null; try { // Create the cache which causes the cache-xml-file to be parsed cache = new CacheFactory().set("name", "yqu_test_cache") .set("cache-xml-file", "xml/YquTest.xml").create(); // Get the exampleRegion Region yquRegion = cache.getRegion("yqu_region"); printRegionFullPath(yquRegion); DynamicRegionFactory dynRegFactory = DynamicRegionFactory.get(); for(int i=0;i<3;i++) { Region keyRegion = dynRegFactory.
阅读全文 »

网络工具笔记

时间: 2013-06-28   |   分类: Tool     |   阅读: 1438 字 ~7分钟
nslookup nslookup命令是用来查询因特网域名服务器的。该命令在Unix、Linux和Windows平台都有提供。如果在Linux平台上找不到nslookup命令,检查是否安装bind-utils。 nslookup的使用模式 nslookup有两种模式:交互式和非交互式。 交互式模式允许向域名服务器查询各种主机、域名或打印域内主机列表。 非交互式模式用于查询一个主机或域的信息。 C:\>nslookup /? Usage: nslookup [-opt ...] # interactive mode using default server nslookup [-opt ...] - server # interactive mode using 'server' nslookup [-opt ...] host # just look up 'host' using default server nslookup [-opt ...] host server # just look up 'host' using 'server' 制定了查询对象就进入非交互式模式,否则进入交互模式。示例如下: 这两次查询百度的命令区别在于:第一次使用了默认DNS,第二次指定了Google的DNS。返回结果是非权威答案,即从上连DNS服务器的本地缓存中读取出的值,而非实际去查询到的值。 nslookup选项 set all:列出nslookup工具的常用选项的当前设置值。 set class=[value]:可以更改查询类 IN:Internet类(默认) CH:Chaos类 HS:Hesiod类 ANY:通配 Chaos和Hesiod现在几乎无人使用。 set [no]debug:可以用来设置是否进入调试模式。如果setdebug,则会进入到调试模式,查询过程中会显示完整的响应包以及其中的交互包。 set[no]d2:开启了高级调试模式,会输出很多nslookup内部工作的信息,包括了许多函数调用信息。 set domain=[name]:用于设置默认的域。 set [no]search:使用域搜索列表。 setport=[value]:众所周知,DNS默认的服务端口是53。当某些特殊情况,此端口改变时,可以通过本命令来设置。 set type=[value]:也可以写成setquerytype=[value],用于更改信息查询类型。默认情况下,nslookup是查询域名所对应的A记录,而如果你想查询其对应的MX记录等信息时,就需要专门设置type值了。目前常用的type值如下: A:查看主机的IPv4地址 AAAA:查看主机的IPv6地址 ANY:查看关于主机域的所有信息 CNAME:查找与别名对应的正式名字 ISDN:域名对应的ISDN号码 HINFO:查找主机的CPU与操作系统类型 MB:存放指定邮箱的服务器 MG:邮件组记录 MINFO:查找邮箱信息 MR:改名的邮箱记录 MX:查找邮件交换信息 NS:查找主机域的域名服务器 PTR:查找与给定IP地址匹配的主机名 RP:查找域负责人记录 RT:路由穿透记录 SOA:查找域内的SOA地址 SRV:TCP服务器信息记录 TXT:域名对应的文本信息 UINFO:查找用户信息 X25:域名对应的X.
阅读全文 »

常用HTML转义字符

时间: 2013-06-25   |   分类: FrontEnd     |   阅读: 657 字 ~4分钟
最常用的字符实体 |显示|说明|实体名称|实体编号 |—– | |半方大的空白|& ensp;|& #8194; | |全方大的空白|& emsp;|& #8195; | |不断行的空白格|& nbsp;|& #160; |< |小于|& lt;|& #60; |>|大于|& gt;|& #62; |&|& 符号|& amp;|& #38; |"|双引号|& quot;|& #34; |©|版权|& copy;|& #169; |®|已注册商标|& reg;|& #174; |™|商标(美国)|& trade;|& #8482; |×|乘号|& times;|& #215; |÷|除号|& divide;|& #247; ISO 8859-1 (Latin-1)字符集 HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集。 备注:为了方便起见,以下表格中,“实体名称”简称为“名称”,“实体编号”简称为“编号” |显示|名称|编号|显示|名称|编号|显示|名称|编号 |—– | |& nbsp;|& #160;|¡|& iexcl;|& #161;|¢|& cent;|& #162; |£|& pound;|& #163;|¤|& curren;|& #164;|¥|& yen;|& #165; |¦|& brvbar;|& #166;|§|& sect;|& #167;|¨|& uml;|& #168; |©|& copy;|& #169;|ª|& ordf;|& #170;|«|& laquo;|& #171; |¬|& not;|& #172;|­|& shy;|& #173;|®|& reg;|& #174; |¯|& macr;|& #175;|°|& deg;|& #176;|±|& plusmn;|& #177; |²|& sup2;|& #178;|³|& sup3;|& #179;|´|& acute;|& #180; |µ|& micro;|& #181;|¶|& para;|& #182;|·|& middot;|& #183; |¸|& cedil;|& #184;|¹|& sup1;|& #185;|º|& ordm;|& #186; |»|& raquo;|& #187;|¼|& frac14;|& #188;|½|& frac12;|& #189; |¾|& frac34;|& #190;|¿|& iquest;|& #191;|À|& Agrave;|& #192; |Á|& Aacute;|& #193;|Â|& Acirc;|& #194;|Ã|& Atilde;|& #195; |Ä|& Auml;|& #196;|Å|& Aring;|& #197;|Æ|& AElig;|& #198; |Ç|& Ccedil;|& #199;|È|& Egrave;|& #200;|É|& Eacute;|& #201; |Ê|& Ecirc;|& #202;|Ë|& Euml;|& #203;|Ì|& Igrave;|& #204; |Í|& Iacute;|& #205;|Î|& Icirc;|& #206;|Ï|& Iuml;|& #207; |Ð|& ETH;|& #208;|Ñ|& Ntilde;|& #209;|Ò|& Ograve;|& #210; |Ó|& Oacute;|& #211;|Ô|& Ocirc;|& #212;|Õ|& Otilde;|& #213; |Ö|& Ouml;|& #214;|×|& times;|& #215;|Ø|& Oslash;|& #216; |Ù|& Ugrave;|& #217;|Ú|& Uacute;|& #218;|Û|& Ucirc;|& #219; |Ü|& Uuml;|& #220;|Ý|& Yacute;|& #221;|Þ|& THORN;|& #222; |ß|& szlig;|& #223;|à|& agrave;|& #224;|á|& aacute;|& #225; |â|& acirc;|& #226;|ã|& atilde;|& #227;|ä|& auml;|& #228; |å|& aring;|& #229;|æ|& aelig;|& #230;|ç|& ccedil;|& #231; |è|& egrave;|& #232;|é|& eacute;|& #233;|ê|& ecirc;|& #234; |ë|& euml;|& #235;|ì|& igrave;|& #236;|í|& iacute;|& #237; |î|& icirc;|& #238;|ï|& iuml;|& #239;|ð|& eth;|& #240; |ñ|& ntilde;|& #241;|ò|& ograve;|& #242;|ó|& oacute;|& #243; |ô|& ocirc;|& #244;|õ|& otilde;|& #245;|ö|& ouml;|& #246; |÷|& divide;|& #247;|ø|& oslash;|& #248;|ù|& ugrave;|& #249; |ú|& uacute;|& #250;|û|& ucirc;|& #251;|ü|& uuml;|& #252; |ý|& yacute;|& #253;|þ|& thorn;|& #254;|ÿ|& yuml;|& #255;
阅读全文 »

MySQL、Postgres、Oracle、SQL server、DB2、Teradata、Netezza数据类型比较

时间: 2013-06-24   |   分类: db+nosql     |   阅读: 111 字 ~1分钟
mysqlpostgresoraclemssqldb2teredatanetezzabigint8bytes -9223372036854775808~9223372036854775807 0~184467440737095516158bytes -9223372036854775808~9223372036854775807Not support8bytes -9223372036854775808~92233720368547758078bytes (precision of 19digits) -9223372036854775808~92233720368547758078bytes -9223372036854775808~92233720368547758078bytes -9223372036854775808~9223372036854775807decimal(m,n)65digits 64: MySQL 5.0.3~5.0.5 8?: MySQL 5.0.3 beforeno limit? 1000digits?m:1 ~38 n:-84~127.m:1 ~38 n:0~m1~31digitsm:1~18m:1 ~38 n:0~mnumeric=decimalnumeric=decimalnumeric=decimalnumeric=decimalnumeric=decimalinteger4bytes -2147483648~2147483647 0~42949672954bytes -2147483648~2147483647INTEGER=NUMBER(38) int 4bytes -2147483648~21474836474bytes (precision of 10digits) -2147483648~21474836474bytes -2147483648~21474836474bytes -2147483648~2147483647varchar(n)0~255characters : MySQLbefore 0~65,535characters : MySQL 5.0.3 and above unlimited lengthvarchar2(n) 4000 bytes800032672bytes64000 bytes64000 characterschar(n)0~255characters? unlimited length2000 bytes80001~25464000 bytes64000 characterstextTINYTEXT:255(2^8)bytes TEXT:65535(2^16)bytes MEDIUMTEXT:16777215 (2^24)bytes LONGTEXT:4294967295 (2^32)bytesunlimited lengthCLOB: (4 gigabytes - 1) * (database block size).
阅读全文 »

Shell参数扩展

时间: 2013-06-23   |   分类: Tool   Linux     |   阅读: 39 字 ~1分钟
在hadoop-env.sh中,有如下语句: export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"} 这种用法在Shell Parameter Expansion中进行了详尽的介绍,系统学习一下。 Bash中的$符号的作用是参数替换,将参数名替换为参数所代表的值。对于$来说,大括号是可选的,即$ABC和${ABC}代表同一个参数。但是它可以防止变量被错误解析,比如:${hello}world、${arr[1]}。 参数扩展 下列Bash对参数的测试项为未设置和null。如果略掉冒号,则仅测试未设置。 |表达式|含义 |—– |${parameter:-word}|如果parameter没有被声明或者其值为空的话,则表达式替换成word;否则替换成parameter的值。 |${parameter:=word}|如果parameter没有被声明或者其值为空的话,则parameter设为word之后表达式返回parameter的值;否则替换成parameter的值。 |${parameter?word}|如果parameter没有被声明或者其值为空的话,则word被写往标准错误输出和Shell,非可交互的情况下退出;否则替换成parameter的值。 |${parameter:+word}|如果parameter没有被声明或者其值为空的话,则不进行替换;否则替换成parameter的值。 |${!varprefix*} ${!varprefix@}|匹配之前所有以varprefix开头进行声明的变量 |${!name[@]} ${!name[*]}|如果name是数组对象,返回数组下标列表;如果name以设置但不为数组对象,返回0;否则返回null。 字符串操作 |表达式|含义 |—– |${% raw %}{#{% endraw %}parameter}|parameter的长度。 |${parameter:offset}|在parameter中,从位置offset开始提取子串。 |${parameter:offset:length}|在parameter中,从位置offset开始提取长度为length的子串。 |${parameter#word} ${parameter##word}|从头开始扫描parameter对应值,将匹配word正则表达式的字符删除掉#为最短匹配,##为最长匹配。 |${parameter%word} ${parameter%%word}|从尾开始扫描parameter对应值,将匹配word正则表达式的字符删除掉%为最短匹配,%%为最长匹配。 |${parameter/pattern/string} ${parameter//pattern/string}|将parameter对应值的pattern代替为string。/表示只替换一次,//表示全部替换。 |${parameter^pattern} ${parameter^^pattern}|如果pattern是单个字符,将parameter对应值中匹配pattern的字符转换为大写。^表示只转换匹配的首字母,^^表示全部转换。 |${parameter,pattern} ${parameter,,pattern}|如果pattern是单个字符,将parameter对应值中匹配pattern的字符转换为小写。,表示只转换匹配的首字母,,,表示全部转换。

Java对象的内存使用量分析

时间: 2013-06-19   |   分类: Java     |   阅读: 22 字 ~1分钟
前段时间做GemFire中对象的内存使用量分析时,学习了一下Java对象的内存使用量分析。 如果不知道一个没有变量的空对象占8字节,空数组占12字节,空字符串对象占40字节的话,有必要看一下下面的链接进行学习。 Memory usage of Java Strings and string-related objects Determining Memory Usage in Java Java对象内存结构 主题:如何获取一个对象的在内存中的大小? JAVA Objects Memory Size Reference

发现Hibernate 3.2.6统计中一个bug

时间: 2013-06-18   |   分类: Service+JavaEE     |   阅读: 45 字 ~1分钟
今天使用Hibernate的统计类,分析一下结果。结果发现了一个bug,不能获得查询缓存中的查询语句。 这个bug倒在3.6.8已经修改了,不过还是影响我的工作。 Statistics stat = sessionFactory.getStatistics(); logger.info("isStatisticsEnabled:"+stat.isStatisticsEnabled()); logger.info("stat="+stat.toString()); logger.info("queries="+Arrays.toString(stat.getQueries())); org.hibernate.stat.StatisticsImpl.java public String[] getQueries() { return ArrayHelper.toStringArray( queryStatistics.keySet()); } org.hibernate.util.ArrayHelper.java (Hibernate 3.2.6) public static String[] toStringArray(Collection coll) { return (String[]) coll.toArray(EMPTY_STRING_ARRAY); } org.hibernate.util.ArrayHelper.java (Hibernate3.6.8) public static String[] toStringArray(Collection coll) { return (String[]) coll.toArray( new String[coll.size()]); }
58 59 60 61 62 63 64 65 66

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%