if ! $(AntlrRules_INCLUDED) {
AntlrRules_INCLUDED = TRUE ;

include [ FDirName $(SUBDIR) JavaRules ] ;

# AntlrGrammar ParserPrefix : grammar.g grammar.tree.g : grammar.package ;
rule AntlrGrammar
{
  local prefix = $(1) ;
  local grammar = $(2[1]) ;
  local grammar.tree = $(2[2]) ;
  local package = $(3) ;

#  Echo AntlrTool . $(prefix) . $(grammar) . $(grammar.tree) . $(package) ;

  local files = $(prefix)Lexer.java $(prefix)Parser.java $(prefix)TokenTypes.java $(prefix)TokenTypes.txt ;
  local files.tree = $(prefix)TreeParser.java $(prefix)TreeParserTokenTypes.java $(prefix)TreeParserTokenTypes.txt ;
  AntlrTool $(files) : $(grammar) : $(package) ;
  if $(files.tree) {
    Depends $(files.tree) : $(files) ;
    AntlrTool $(files.tree) : $(grammar.tree) : $(package) ;
  }
}

rule AntlrGrammarArg
{
  local prefix = $(1) ;
  local grammar = $(2[1]) ;
  local grammar.tree = $(2[2]) ;
  local package = $(3) ;
  local java_src_dir = $(4) ;

#  Echo AntlrTool . $(prefix) . $(grammar) . $(grammar.tree) . $(package) ;

  local files = $(prefix)Lexer.java $(prefix)Parser.java $(prefix)TokenTypes.java $(prefix)TokenTypes.txt ;
  local files.tree = $(prefix)TreeParser.java $(prefix)TreeParserTokenTypes.java $(prefix)TreeParserTokenTypes.txt ;
  AntlrToolArg $(files) : $(grammar) : $(package) : $(java_src_dir) ;
  if $(files.tree) {
    Depends $(files.tree) : $(files) ;
    AntlrToolArg $(files.tree) : $(grammar.tree) : $(package) : $(java_src_dir) ;
  }
}

rule AntlrTool
{
  local files = $(1) ;
  local grammar = $(2) ;
  local package = $(3) ;

#  Echo AntlrTool . $(files) . $(grammar) . $(package) ;

  local pathname = [ FDirName $(JAVA_SRC_DIR) [ FSplit "\\." : $(package) ] ] ;
  PATHNAME on $(files) = $(pathname) ;
  RELPATH on $(files) = [ FRelPath $(pathname) : $(PWD) ] ;
  SEARCH on $(grammar) += $(SEARCH_SOURCE) ;
  MakeLocate $(files) : $(pathname) ;
  RunAntlrTool $(files) : $(grammar) ;
}

rule AntlrToolArg
{
  local files = $(1) ;
  local grammar = $(2) ;
  local package = $(3) ;
  local java_src_dir = $(4) ;
#  Echo AntlrTool . $(files) . $(grammar) . $(package) ;

  local pathname = [ FDirName $(java_src_dir) [ FSplit "\\." : $(package) ] ] ;
  PATHNAME on $(files) = $(pathname) ;
  RELPATH on $(files) = [ FRelPath $(pathname) : $(PWD) ] ;
  SEARCH on $(grammar) += $(SEARCH_SOURCE) ;
  MakeLocate $(files) : $(pathname) ;
  RunAntlrTool $(files) : $(grammar) ;
}

rule RunAntlrTool
{
  local files = $(1) ;
  local grammar = $(2) ;
  local package = $(3) ;

#  Echo RunAntlrTool . $(files) . $(grammar) . $(package) ;

  Depends $(files) : $(grammar) ;
  LocalClean clean : $(files) ;
}

#  cd $(PATHNAME) 

actions RunAntlrTool
{
  rm -f $(1)
  "$(JAVA)" -cp $(ANTLR_JAR) antlr.Tool -o $(PATHNAME) $(2) 
}

} # AntlrRules_INCLUDED

