# argumentos (e opções) para o programa ARGS = # linguagem definida/processada LINGUAGEM = lambda # classes do programa (acrescentar a gosto) CLASSES = Main # ... JAVA = java JAVAFLAGS = JAVAC = javac JAVACFLAGS = JCLASSPATH = .:/usr/share/java/cup.jar CUP = cup CUPFLAGS = -nosummary JLEX = jlex JLEXFLAGS = Yylex_java = $(LINGUAGEM).lex.java # para usar o jflex, comentar as 3 linhas acima e descomentar as 3 abaixo #JLEX = jflex #JLEXFLAGS = #Yylex_java = Yylex.java MAIN_CLASSES = parser.class Yylex.class \ $(patsubst %, %.class, $(CLASSES)) INTERMEDIATE_FILES = sym.java parser.java $(Yylex_java) .PHONY: all clean run Makefile %.class: %.java CLASSPATH=$(JCLASSPATH) $(JAVAC) $(JAVACFLAGS) $< all: $(MAIN_CLASSES) parser.java sym.java: $(LINGUAGEM).cup $(CUP) $(CUPFLAGS) $< @[ -s $@ ] || { rm -f $@; exit 1; } parser.class: parser.java Yylex.class CLASSPATH=$(JCLASSPATH) $(JAVAC) $(JAVACFLAGS) $< $(Yylex_java): $(LINGUAGEM).lex $(JLEX) $(JLEXFLAGS) $< Yylex.class: $(Yylex_java) sym.class CLASSPATH=$(JCLASSPATH) $(JAVAC) $(JAVACFLAGS) $< clean: $(RM) $(INTERMEDIATE_FILES) $(RM) *.class run: CLASSPATH=$(JCLASSPATH) $(JAVA) $(JAVAFLAGS) Main $(ARGS)