module DFA_Defs

  ! Type definition for DFA representation.
  ! Named constant definitions for edge labels.

  public

  type :: DFA_t(N_Vertices, N_Edges, Last_Action, Last_Class, &
    & Len_Action, Len_Class)
    integer, len :: N_Vertices, N_Edges, Last_Action, Last_Class, &
      & Len_Action, Len_Class
    character(len_action) :: Action_Names(last_action)
    character(len_class) :: Class_Names(0:last_class)
    integer :: Actions(n_vertices)
    integer :: Edges(0:n_vertices)
    integer :: To(n_edges)
    integer :: Label(n_edges)
    integer :: Modify(n_edges)
  end type DFA_t

  ! Edge label modifier bits
  integer, parameter :: Keep = 0     ! Keep character
  integer, parameter :: Skip = 1     ! Delete this character
  integer, parameter :: Previous = 2 ! Delete previous charater, usually
                                     ! to remove extra quote or apostrophe
  integer, parameter :: Not = 8      ! Everything but the character

!---------------------------- RCS Module Info ------------------------------
  character (len=*), private, parameter :: ModuleName= &
       "$RCSfile: DFA_Defs.f90,v $"
  private :: not_used_here 
!---------------------------------------------------------------------------

contains

!--------------------------- end bloc --------------------------------------
  logical function not_used_here()
  character (len=*), parameter :: IdParm = &
       "$Id: DFA_Defs.f90,v 1.1 2022/01/24 22:00:46 vsnyder Exp $"
  character (len=len(idParm)) :: Id = idParm
    not_used_here = (id(1:1) == ModuleName(1:1))
    print *, Id ! .mod files sometimes change if PRINT is added
  end function not_used_here
!---------------------------------------------------------------------------

end module DFA_Defs

! $Log: DFA_Defs.f90,v $
! Revision 1.1  2022/01/24 22:00:46  vsnyder
! Initial commit
!
