@@ -14,6 +14,11 @@ B = $(CFG_BUILD_DIR)/$(CFG_BUILD)/stage2/
1414L = $(B ) lib/rustlib/$(CFG_BUILD ) /lib
1515LD = $(CFG_BUILD ) /stage2/lib/rustlib/$(CFG_BUILD ) /lib/
1616RUSTC = $(STAGE2_T_$(CFG_BUILD ) _H_$(CFG_BUILD ) )
17+ ifeq ($(CFG_OSTYPE ) ,apple-darwin)
18+ FLEX_LDFLAGS=-ll
19+ else
20+ FLEX_LDFLAGS=-lfl
21+ endif
1722
1823# Run the reference lexer against libsyntax and compare the tokens and spans.
1924# If "// ignore-lexer-test" is present in the file, it will be ignored.
@@ -67,3 +72,46 @@ $(info cfg: javac not available, skipping lexer test...)
6772check-lexer :
6873
6974endif
75+
76+ $(BG ) lex.yy.c : $(SG ) lexer.l $(BG )
77+ @$(call E, flex: $@ )
78+ $(Q )$(CFG_FLEX ) -o $@ $<
79+
80+ $(BG ) lexer-lalr.o : $(BG ) lex.yy.c $(BG ) parser-lalr.tab.h
81+ @$(call E, cc: $@ )
82+ $(Q )$(CFG_CC ) -include $(BG ) parser-lalr.tab.h -c -o $@ $<
83+
84+ $(BG ) parser-lalr.tab.c $(BG ) parser-lalr.tab.h : $(SG ) parser-lalr.y
85+ @$(call E, bison: $@ )
86+ $(Q )$(CFG_BISON ) $< --output=$(BG ) parser-lalr.tab.c --defines=$(BG ) parser-lalr.tab.h \
87+ --name-prefix=rs --warnings=error=all
88+
89+ $(BG ) parser-lalr.o : $(BG ) parser-lalr.tab.c
90+ @$(call E, cc: $@ )
91+ $(Q )$(CFG_CC ) -c -o $@ $<
92+
93+ $(BG ) parser-lalr-main.o : $(SG ) parser-lalr-main.c
94+ @$(call E, cc: $@ )
95+ $(Q )$(CFG_CC ) -std=c99 -c -o $@ $<
96+
97+ $(BG ) parser-lalr : $(BG ) parser-lalr.o $(BG ) parser-lalr-main.o $(BG ) lexer-lalr.o
98+ @$(call E, cc: $@ )
99+ $(Q )$(CFG_CC ) -o $@ $^ $(FLEX_LDFLAGS )
100+
101+
102+ ifdef CFG_FLEX
103+ ifdef CFG_BISON
104+ check-grammar : $(BG ) $(BG ) parser-lalr
105+ $(info Verifying grammar ...)
106+ $(SG ) testparser.py -p $(BG ) parser-lalr -s $(S ) src
107+
108+ else
109+ $(info cfg : bison not available, skipping parser test...)
110+ check-grammar :
111+
112+ endif
113+ else
114+ $(info cfg : flex not available, skipping parser test...)
115+ check-grammar :
116+
117+ endif
0 commit comments