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 ;
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号