dot语法

DOT词法规则

node, edge, graph, digraph, subgraph,strict都是大小写敏感的,比如我们想使用nOdE这样的变量;

STRICT : [Ss][Tt][Rr][Ii][Cc][Tt] ;
GRAPH : [Gg][Rr][Aa][Pp][Hh] ;
DIGRAPH : [Dd][Ii][Gg][Rr][Aa][Pp][Hh] ;
NODE : [Nn][Oo][Dd][Ee] ;
EDGE : [Ee][Dd][Gg][Ee] ;
SUBGRAPH : [Ss][Uu][Bb][Gg][Rr][Aa][Pp][Hh] ;

标识符和大多数语法一样,由字母[a-zA-Z\200-\377]、下划线、数字组成,但是不能以数字开头;
\200-\377是八进制表示法,十六进制范围是80-FF,所以可以写成

ID : LETTER (LETTER|DIGIT)*;
fragment
LETTER : [a-zA-Z\u0080-\u00FF_] ;

帮助规则DIGIT是我们需要匹配number的规则,数字遵循下面的规则

[-]?(.[0-9]+ | [0-9]+(.[0-9]*)? )

把[0-9]替换为DIGIT

NUMBER : '-'? ('.' DIGIT+ | DIGIT+ ('.' DIGIT*)? ) ;
fragment
DIGIT : [0-9] ;

串是包含在双印号之间的部分,为了匹配双引号之间的内容,我们用.消耗字符

STRING : '"' ('\\"'|.)*? '"' ;

也能够通过<>匹配串,这种html风格,能够合理的根据<>对进行匹配;
比如输入<foo<!--ksjdf > -->>我们能匹配到foo<!--ksjdf > --

HTML_STRING : '<' (TAG|~[<>])* '>' ;
fragment
TAG : '<' .*? '>' ;

也可使用递归

HTML_STRING : '<' (HTML_STRING|~[<>])* '>' ;

不过递归的方式只匹配平衡的尖括号
<<i<br>>>类似这种的无法匹配;
井号是一种预处理,我们这里认为它是一种注释

PREPROC : '#' .*? '\n' -> skip ;
posted @ 2017-01-04 00:18  zhangshihai1232  阅读(456)  评论(0)    收藏  举报