- 浏览: 3019121 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
拿Oslo来玩了会儿。主要还是玩Intellipad和MGrammar。编辑器的使用体验还挺不错的。
把之前一个学弟问我帮忙写的parser要处理的语言拿来用了下:
M用的parse算法是GLR,内部主要是LALR(1)。语法文件的语法与YACC或ANTLR还是比较相似的;与ANTLR特别相似的地方是,语法规则和词法规则都使用同样的EBNF方式来表示。也有人诟病这种方式不符合一般写正则表达式的习惯。
在Intellipad的MGrammar三面板模式下,显示如下(点击放大):
三个面板中,左边是样本输入,中间是语法,右边是输出。解析是动态完成的,如果左边的输入不符合中间的语法,编辑器就会提示有错误;并且语法文件中指定的语法高亮也能够在左边的面板中体现出来。可以看到上面的图里,输入为:
输出为一个MGraph:
这个MGraph可以被保存在数据库里,可以转换成XML(XAML),也可以直接通过.NET程序来使用。以后有空再试试直接从C#里使用这个parser是怎么样的。
默认的关键字高亮是黑色,#FF000000。要改变这个颜色很容易,只要在下面的配置文件里修改Foreground值就行:
/Bin/Intellipad/Settings/ClassificationFormats.xcml:
上面的截图里,除了关键字的颜色换了之外,注释的颜色和样式也稍微改了改(#FF808080 -> #FF008000)。
把之前一个学弟问我帮忙写的parser要处理的语言拿来用了下:
module QueryGrammar { language QueryLanguage { syntax Main = q:Query => q; syntax Query = q:AtomicQuery => q | q:BooleanQuery => q ; syntax AtomicQuery = w:word => Atom { w } | f:word ':' w:word => Field { f, w } | f:word ':' '[' start:word '-' end:word ']' => Field { f, ClosedRange { start, end } } | f:word ':' '(' start:word '-' end:word ')' => Field { f, OpenRange { start, end } } ; syntax BooleanQueryOperand = q:AtomicQuery => q | '(' q:BooleanQuery ')' => q ; syntax BooleanQuery = a:BooleanQueryOperand 'AND' b:BooleanQueryOperand => And { a, b } | a:BooleanQueryOperand 'OR' b:BooleanQueryOperand => Or { a, b } | 'NOT' o:BooleanQueryOperand => Not { o } ; token word = ( 'a'..'z' | 'A'..'Z' | '0'..'9' )+; @{Classification["Keyword"]} final token AND = 'AND'; @{Classification["Keyword"]} final token OR = 'OR'; @{Classification["Keyword"]} final token NOT = 'NOT'; @{Classification["Comment"]} token lineComment = '//' commentContent*; token commentContent = ^( '\r' | '\n' ); interleave Comment = lineComment; interleave WhiteSpace = ' ' | '\t' | '\r' | '\n'; } }
M用的parse算法是GLR,内部主要是LALR(1)。语法文件的语法与YACC或ANTLR还是比较相似的;与ANTLR特别相似的地方是,语法规则和词法规则都使用同样的EBNF方式来表示。也有人诟病这种方式不符合一般写正则表达式的习惯。
在Intellipad的MGrammar三面板模式下,显示如下(点击放大):
三个面板中,左边是样本输入,中间是语法,右边是输出。解析是动态完成的,如果左边的输入不符合中间的语法,编辑器就会提示有错误;并且语法文件中指定的语法高亮也能够在左边的面板中体现出来。可以看到上面的图里,输入为:
// query comments NOT (fileName:(alpha-beta123) AND fileSize:[50-100])
输出为一个MGraph:
Not{ And{ Field{ "fileName", OpenRange{ "alpha", "beta123" } }, Field{ "fileSize", ClosedRange{ "50", "100" } } } }
这个MGraph可以被保存在数据库里,可以转换成XML(XAML),也可以直接通过.NET程序来使用。以后有空再试试直接从C#里使用这个parser是怎么样的。
默认的关键字高亮是黑色,#FF000000。要改变这个颜色很容易,只要在下面的配置文件里修改Foreground值就行:
/Bin/Intellipad/Settings/ClassificationFormats.xcml:
<act:Export Name='{}{Microsoft.Intellipad}ClassificationFormat'> <ls:ClassificationFormat Name='Keyword' FontFamily='Consolas' FontWeight='Bold' Foreground='#FF000000' />
<act:Export Name='{}{Microsoft.Intellipad}ClassificationFormat'> <ls:ClassificationFormat Name='Keyword' FontFamily='Consolas' Foreground='#FF0000FF' />
上面的截图里,除了关键字的颜色换了之外,注释的颜色和样式也稍微改了改(#FF808080 -> #FF008000)。
发表评论
-
Sun JDK1.4.2_28有TieredCompilation
2014-05-12 08:48 0原来以前Sun的JDK 1.4.2 update 28就已经有 ... -
IBM JVM notes (2014 ver)
2014-05-11 07:16 0Sovereign JIT http://publib.bou ... -
HotSpot Server Compiler与data-flow analysis
2014-01-07 17:41 0http://en.wikipedia.org/wiki/Da ... -
基于LLVM实现VM的JIT的一些痛点
2014-01-07 17:25 0同事Philip Reames Sanjoy Das http ... -
《自制编程语言》的一些笔记
2013-11-24 00:20 0http://kmaebashi.com/programmer ... -
对C语义的for循环的基本代码生成模式
2013-10-19 23:12 21766之前有同学在做龙书(第二版)题目,做到8.4的练习,跟我对答案 ... -
Nashorn各种笔记
2013-07-15 17:03 0http://bits.netbeans.org/netbea ... -
《深入理解Java虚拟机(第二版)》书评
2013-07-08 19:19 0值得推荐的中文Java虚拟机入门书 感谢作者赠与的样书,以下 ... -
豆列:从表到里学习JVM实现
2013-06-13 14:13 48132刚写了个学习JVM用的豆列跟大家分享。 豆列地址:http: ... -
Building Blocks of a JavaScript Engine
2013-05-23 00:49 0sketches of my new book "B ... -
读《JavaScript语言精髓与编程实践(第二版)》
2013-05-21 00:32 02008年逛书店的时候偶 ... -
添加一个bool C1LateInline参数?
2011-11-25 16:03 0之前我试过给Phi加exact_type不行,那如果像C2一样 ... -
别测空循环
2011-06-23 21:56 5187今天有朋友提到一个叫 ReflectASM的库,为Java环境 ... -
javac在编译创建内部类对象时生成的奇怪的getClass()调用是什么?
2011-06-14 22:17 4183有人问下面这段代码里,main()方法里的outer.new ... -
confluence property
2011-06-08 20:41 0http://en.wikipedia.org/wiki/Co ... -
JIT编译找不到类?
2011-05-09 22:28 5130今天开始Sun的老blog真的搬迁了,从blogs.sun.c ... -
几个简答题
2011-01-10 16:08 2417某题目 写道 龙书 写道In addition to a c ... -
循环中的字符串拼接的优化
2010-12-09 20:46 0public class StringConcatDemo { ... -
Velocity模板的编译
2010-11-15 14:49 0http://ecee.colorado.edu/ecen45 ... -
ANTLR里迭代子规则的一个注意点
2010-09-27 15:31 3561这几天在休假在家,有空的时候在用ANTLR 3.2来写D 2. ...
相关推荐
使用 OpenGL 绘制立方体,并给立方体表面贴 6 张不同的图片
仿Instagram贴标签显示效果_显示多张图_你绝对值得拥有!改良自:yuhanxun,u011275225. 功能:1,带标签的,多张图的(发布界面);2,列表显示;3,单个界面显示多张图
30张图,详细描述了中国目前金融体系架构情况,可以比较高阶性掌握目前的金融体系。
做三维场景使用的天空盒子的六张贴图,加载到skybox的六个面可以渲染一个三维场景
本资源基于Filament实现了立方体贴图,效果详见博客→https://zhyan8.blog.csdn.net/article/details/135188945
UML 图书管理系统 9张图UML 图书管理系统 9张图UML 图书管理系统 9张图
1000张图故事连接 七田真1000张图故事连接 七田真1000张图故事连接 七田真1000张图故事连接 七田真1000张图故事连接 七田真1000张图故事连接 七田真1000张图故事连接 七田真1000张图故事连接 七田真1000张图故事连接...
unity之uv贴图画圆弧,圆弧面,不规则图形 实现各种贴图想要的效果
【二建公路】10-XT-实操必识24张图.rar
多达几十个的天空盒贴图,含有夜晚星星,黄昏,晴天,阴天多云等天空盒。
于是,我花了几周的时间来学习Docker的工作原理,更确切地说,是关于Docker统一文件系统(the union file system)的知识,然后回过头来
50张图渲染教室第四期_夜景技巧,简单教会大家如何渲染夜景
CSDN文章封面五张图
主要介绍了python pyecharts 实现一个文件绘制多张图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
批量加水印,速度快,10分钟1万张图轻松搞定。解压就可以使用
八张图深度理解Java特性
精毅教程系列:12张图教你出刀路新手教程,使用ARTCAM软件将灰度图转G代码教程,用于浮雕加工
富文本编辑器引入和获取富文本第一张图设置为缩略图, 获取编辑器第一张图设置为缩略图,富文本编辑器,编辑器
腾讯6张图切换JS代码.zip 腾讯6张图切换JS代码.zip 腾讯6张图切换JS代码.zip
花生胚芽标记25张图, labelme标记 花生胚芽标记25张图, labelme标记 花生胚芽标记25张图, labelme标记