Home | History | Annotate | Download | only in dot
      1 /*
      2  * [The "BSD license"]
      3  * Copyright (c) 2011 Terence Parr
      4  * All rights reserved.
      5  *
      6  * Conversion to C#:
      7  * Copyright (c) 2011 Sam Harwell, Tunnel Vision Laboratories, LLC.
      8  * All rights reserved.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  * 3. The name of the author may not be used to endorse or promote products
     19  *    derived from this software without specific prior written permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 dfa(decisionRanks,states,edges,rankdir,startState,useBox) ::= <<
     34 digraph NFA {
     35 <if(rankdir)>rankdir=<rankdir>;<endif>
     36 <decisionRanks; separator="\n">
     37 <states; separator="\n">
     38 <edges; separator="\n">
     39 }
     40 >>
     41 
     42 nfa(decisionRanks,states,edges,rankdir,startState) ::= <<
     43 digraph NFA {
     44 rankdir=LR;
     45 <decisionRanks; separator="\n">
     46 <states; separator="\n">
     47 <edges; separator="\n">
     48 }
     49 >>
     50 
     51 decision_rank(states) ::= <<
     52 {rank=same; rankdir=TB; <states; separator="; ">}
     53 >>
     54 
     55 edge(src,target,label,arrowhead) ::= <<
     56 <src> -> <target> [fontsize=11, fontname="Courier", arrowsize=.7, label = "<label>"<if(arrowhead)>, arrowhead = <arrowhead><endif>];
     57 >>
     58 
     59 action_edge(src,target,label,arrowhead) ::= <<
     60 <src> -> <target> [fontsize=11, fontname="Courier", arrowsize=.7, label = "<label>"<if(arrowhead)>, arrowhead = <arrowhead><endif>];
     61 >>
     62 
     63 epsilon_edge(src,target,label,arrowhead) ::= <<
     64 <src> -> <target> [fontname="Times-Italic", label = "e"];
     65 >>
     66 
     67 state(name,useBox) ::= <<
     68 node [fontsize=11, shape = <if(useBox)>box<else>circle, fixedsize=true, width=.4<endif>]; <name>
     69 >>
     70 
     71 stopstate(name,useBox) ::= <<
     72 node [fontsize=11, shape = <if(useBox)>polygon,sides=4,peripheries=2<else>doublecircle, fixedsize=true, width=.6<endif>]; <name>
     73 >>
     74