随便玩了下Intellipad,贴张图

拿Oslo来玩了会儿。主要还是玩Intellipad和MGrammar。编辑器的使用体验还挺不错的。
把之前一个学弟问我帮忙写的parser要处理的语言拿来用了下:
[code]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';
}
}[/code]
M用的parse算法是GLR,内部主要是LALR(1)。语法文件的语法与YACC或ANTLR还是比较相似的;与ANTLR特别相似的地方是,语法规则和词法规则都使用同样的EBNF方式来表示。也有人诟病这种方式不符合一般写正则表达式的习惯。

在Intellipad的MGrammar三面板模式下,显示如下(点击放大):
[url=http://rednaxelafx.iteye.com/upload/picture/pic/25025/d78d449d-91c3-3f41-99f7-ecd46d81efc7.png][img]http://www.iteye.com/upload/picture/pic/25025/d78d449d-91c3-3f41-99f7-ecd46d81efc7-thumb.png?1226649808[/img][/url]

三个面板中,左边是样本输入,中间是语法,右边是输出。解析是动态完成的,如果左边的输入不符合中间的语法,编辑器就会提示有错误;并且语法文件中指定的语法高亮也能够在左边的面板中体现出来。可以看到上面的图里,输入为:
[code]// query comments
NOT (fileName:(alpha-beta123) AND fileSize:[50-100])[/code]
输出为一个MGraph:
[code]Not{
And{
Field{
"fileName",
OpenRange{
"alpha",
"beta123"
}
},
Field{
"fileSize",
ClosedRange{
"50",
"100"
}
}
}
}[/code]
这个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)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值