diff --git a/.gitignore b/.gitignore --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ /support/xhpast/parser.yacc.output /support/xhpast/node_names.hpp /support/xhpast/xhpast +/support/xhpast/xhpast.exe /src/parser/xhpast/bin/xhpast ## NOTE: Don't .gitignore these files! Even though they're build artifacts, we @@ -23,9 +24,6 @@ # This is an OS X build artifact. /support/xhpast/xhpast.dSYM -# This is a Windows build artifact. -/support/xhpast/xhpast.exe - # libphutil /src/.phutil_module_cache /support/phutiltestlib/.phutil_module_cache diff --git a/support/xhpast/Makefile b/support/xhpast/Makefile --- a/support/xhpast/Makefile +++ b/support/xhpast/Makefile @@ -1,4 +1,4 @@ -BISONFLAGS = --verbose -d -Wall +BISONFLAGS = --verbose -Wall CPPFLAGS = -fPIC FLEXFLAGS = -C @@ -24,47 +24,45 @@ ROOT = ../../src/parser/xhpast +.PHONY: all all: xhpast clean: - -rm xhpast parser.yacc.output libxhpast.a *.o 2>/dev/null + rm --force xhpast parser.yacc.output libxhpast.a *.o cleanall: clean - -rm scanner.lex.cpp scanner.lex.hpp parser.yacc.cpp parser.yacc.hpp + rm --force scanner.lex.hpp scanner.lex.cpp parser.yacc.hpp parser.yacc.cpp + rm --force node_names.hpp parser_nodes.php +.PHONY: install install: xhpast cp xhpast $(ROOT)/bin/xhpast -scanner: scanner.l - flex $(FLEXFLAGS) --header-file=scanner.lex.hpp --outfile=scanner.lex.cpp $< - echo '/* @gen''er''ated */' >> scanner.lex.cpp - echo '/* @gen''er''ated */' >> scanner.lex.hpp +.PHONY: parser scanner +parser: parser.yacc.hpp parser.yacc.cpp +scanner: scanner.lex.hpp scanner.lex.cpp -parser: parser.y - bison $(BISONFLAGS) --output=parser.yacc.cpp $< - echo '/* @gen''er''ated */' >> parser.yacc.cpp - echo '/* @gen''er''ated */' >> parser.yacc.hpp +%.lex.hpp %.lex.cpp: %.l + flex $(FLEXFLAGS) --header-file=$*.lex.hpp --outfile=$*.lex.cpp $< + @echo '/* @gen''er''ated */' >> $*.lex.hpp + @echo '/* @gen''er''ated */' >> $*.lex.cpp -node_names.hpp: generate_nodes.php - php -f generate_nodes.php - cp parser_nodes.php $(ROOT)/ +%.yacc.hpp %.yacc.cpp: %.y + bison $(BISONFLAGS) --defines=$*.yacc.hpp --output=$*.yacc.cpp $< + @echo '/* @gen''er''ated */' >> $*.yacc.hpp + @echo '/* @gen''er''ated */' >> $*.yacc.cpp %.o: %.cpp $(CXX) -c $(CPPFLAGS) -o $@ $< -needparserscanner: - @([ -e parser.yacc.hpp ] && [ -e parser.yacc.cpp ] && \ - [ -e scanner.lex.hpp ] && [ -e scanner.lex.cpp ]) \ - || (echo "Run 'make parser scanner' first.'" && exit 1) +node_names.hpp parser_nodes.php: generate_nodes.php + php -f $< -parser.yacc.o: needparserscanner scanner.lex.hpp - -scanner.lex.o: needparserscanner parser.yacc.hpp node_names.hpp scanner.lex.hpp +parser.yacc.o: scanner.lex.hpp +scanner.lex.o: parser.yacc.hpp node_names.hpp scanner.lex.hpp libxhpast.a: astnode.o scanner.lex.o parser.yacc.o $(AR) -crs $@ $^ xhpast: xhpast.cpp libxhpast.a $(CXX) $(CPPFLAGS) -o $@ $^ - -.PHONY: all clean diff --git a/support/xhpast/generate_nodes.php b/support/xhpast/generate_nodes.php --- a/support/xhpast/generate_nodes.php +++ b/support/xhpast/generate_nodes.php @@ -142,5 +142,5 @@ } $php .= " );\n"; $php .= "}\n"; -file_put_contents('parser_nodes.php', $php); +file_put_contents('../../src/parser/xhpast/parser_nodes.php', $php); echo "Wrote PHP definition.\n"; diff --git a/support/xhpast/parser_nodes.php b/support/xhpast/parser_nodes.php deleted file mode 100644 --- a/support/xhpast/parser_nodes.php +++ /dev/null @@ -1,122 +0,0 @@ - 'n_PROGRAM', - 9001 => 'n_SYMBOL_NAME', - 9002 => 'n_HALT_COMPILER', - 9003 => 'n_NAMESPACE', - 9004 => 'n_STATEMENT', - 9005 => 'n_EMPTY', - 9006 => 'n_STATEMENT_LIST', - 9007 => 'n_OPEN_TAG', - 9008 => 'n_CLOSE_TAG', - 9009 => 'n_USE_LIST', - 9010 => 'n_USE', - 9011 => 'n_CONSTANT_DECLARATION_LIST', - 9012 => 'n_CONSTANT_DECLARATION', - 9013 => 'n_STRING', - 9014 => 'n_LABEL', - 9015 => 'n_CONDITION_LIST', - 9016 => 'n_CONTROL_CONDITION', - 9017 => 'n_IF', - 9018 => 'n_ELSEIF', - 9019 => 'n_ELSE', - 9020 => 'n_WHILE', - 9021 => 'n_DO_WHILE', - 9022 => 'n_FOR', - 9023 => 'n_FOR_EXPRESSION', - 9024 => 'n_SWITCH', - 9025 => 'n_BREAK', - 9026 => 'n_CONTINUE', - 9027 => 'n_RETURN', - 9028 => 'n_GLOBAL_DECLARATION_LIST', - 9029 => 'n_GLOBAL_DECLARATION', - 9030 => 'n_STATIC_DECLARATION_LIST', - 9031 => 'n_STATIC_DECLARATION', - 9032 => 'n_ECHO_LIST', - 9033 => 'n_ECHO', - 9034 => 'n_INLINE_HTML', - 9035 => 'n_UNSET_LIST', - 9036 => 'n_UNSET', - 9037 => 'n_FOREACH', - 9038 => 'n_FOREACH_EXPRESSION', - 9039 => 'n_THROW', - 9040 => 'n_GOTO', - 9041 => 'n_TRY', - 9042 => 'n_CATCH_LIST', - 9043 => 'n_CATCH', - 9044 => 'n_DECLARE', - 9045 => 'n_DECLARE_DECLARATION_LIST', - 9046 => 'n_DECLARE_DECLARATION', - 9047 => 'n_VARIABLE', - 9048 => 'n_REFERENCE', - 9049 => 'n_VARIABLE_REFERENCE', - 9050 => 'n_FUNCTION_DECLARATION', - 9051 => 'n_CLASS_DECLARATION', - 9052 => 'n_CLASS_ATTRIBUTES', - 9053 => 'n_EXTENDS', - 9054 => 'n_EXTENDS_LIST', - 9055 => 'n_IMPLEMENTS_LIST', - 9056 => 'n_INTERFACE_DECLARATION', - 9057 => 'n_CASE', - 9058 => 'n_DEFAULT', - 9059 => 'n_DECLARATION_PARAMETER_LIST', - 9060 => 'n_DECLARATION_PARAMETER', - 9061 => 'n_TYPE_NAME', - 9062 => 'n_VARIABLE_VARIABLE', - 9063 => 'n_CLASS_MEMBER_DECLARATION_LIST', - 9064 => 'n_CLASS_MEMBER_DECLARATION', - 9065 => 'n_CLASS_CONSTANT_DECLARATION_LIST', - 9066 => 'n_CLASS_CONSTANT_DECLARATION', - 9067 => 'n_METHOD_DECLARATION', - 9068 => 'n_METHOD_MODIFIER_LIST', - 9069 => 'n_FUNCTION_MODIFIER_LIST', - 9070 => 'n_CLASS_MEMBER_MODIFIER_LIST', - 9071 => 'n_EXPRESSION_LIST', - 9072 => 'n_LIST', - 9073 => 'n_ASSIGNMENT', - 9074 => 'n_NEW', - 9075 => 'n_UNARY_PREFIX_EXPRESSION', - 9076 => 'n_UNARY_POSTFIX_EXPRESSION', - 9077 => 'n_BINARY_EXPRESSION', - 9078 => 'n_TERNARY_EXPRESSION', - 9079 => 'n_CAST_EXPRESSION', - 9080 => 'n_CAST', - 9081 => 'n_OPERATOR', - 9082 => 'n_ARRAY_LITERAL', - 9083 => 'n_EXIT_EXPRESSION', - 9084 => 'n_BACKTICKS_EXPRESSION', - 9085 => 'n_LEXICAL_VARIABLE_LIST', - 9086 => 'n_NUMERIC_SCALAR', - 9087 => 'n_STRING_SCALAR', - 9088 => 'n_MAGIC_SCALAR', - 9089 => 'n_CLASS_STATIC_ACCESS', - 9090 => 'n_CLASS_NAME', - 9091 => 'n_MAGIC_CLASS_KEYWORD', - 9092 => 'n_OBJECT_PROPERTY_ACCESS', - 9093 => 'n_ARRAY_VALUE_LIST', - 9094 => 'n_ARRAY_VALUE', - 9095 => 'n_CALL_PARAMETER_LIST', - 9096 => 'n_VARIABLE_EXPRESSION', - 9097 => 'n_INCLUDE_FILE', - 9098 => 'n_HEREDOC', - 9099 => 'n_FUNCTION_CALL', - 9100 => 'n_INDEX_ACCESS', - 9101 => 'n_ASSIGNMENT_LIST', - 9102 => 'n_METHOD_CALL', - 9103 => 'n_CONCATENATION_LIST', - 9104 => 'n_PARENTHETICAL_EXPRESSION', - 9105 => 'n_TRAIT_USE', - 9106 => 'n_TRAIT_USE_LIST', - 9107 => 'n_TRAIT_ADAPTATION_LIST', - 9108 => 'n_TRAIT_INSTEADOF', - 9109 => 'n_TRAIT_REFERENCE_LIST', - 9110 => 'n_TRAIT_METHOD_REFERENCE', - 9111 => 'n_TRAIT_AS', - 9112 => 'n_YIELD', - 9113 => 'n_FINALLY', - ); -}