commit 7ece4e4ed1b81f2c0410a7195efcde77842dcd31 Author: Christian Date: Fri Oct 10 16:37:54 2014 +0200 AST printer and command line tool, some fixes. diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..9224c109d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_policy(SET CMP0015 NEW) + +aux_source_directory(. SRC_LIST) + +include_directories(..) + +set(EXECUTABLE solc) + +add_executable(${EXECUTABLE} ${SRC_LIST}) + +target_link_libraries(${EXECUTABLE} solidity) +target_link_libraries(${EXECUTABLE} devcore) + +if ("${TARGET_PLATFORM}" STREQUAL "w64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") + target_link_libraries(${EXECUTABLE} gcc) + target_link_libraries(${EXECUTABLE} gdi32) + target_link_libraries(${EXECUTABLE} ws2_32) + target_link_libraries(${EXECUTABLE} mswsock) + target_link_libraries(${EXECUTABLE} shlwapi) + target_link_libraries(${EXECUTABLE} iphlpapi) + target_link_libraries(${EXECUTABLE} boost_thread_win32-mt-s) + set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS) +elseif (UNIX) +else () + find_package(Threads REQUIRED) + target_link_libraries(${EXECUTABLE} ${CMAKE_THREAD_LIBS_INIT}) +endif () + +install( TARGETS ${EXECUTABLE} DESTINATION bin ) + diff --git a/main.cpp b/main.cpp new file mode 100644 index 000000000..6fca11a67 --- /dev/null +++ b/main.cpp @@ -0,0 +1,78 @@ + +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace dev { +namespace solidity { + +ptr parseAST(std::string const& _source) +{ + ptr scanner = std::make_shared(CharStream(_source)); + Parser parser; + return parser.parse(scanner); +} + +} } // end namespaces + +void help() +{ + std::cout + << "Usage solc [OPTIONS] " << std::endl + << "Options:" << std::endl + << " -h,--help Show this help message and exit." << std::endl + << " -V,--version Show the version and exit." << std::endl; + exit(0); +} + +void version() +{ + std::cout + << "solc, the solidity complier commandline interface " << dev::Version << std::endl + << " by Christian , (c) 2014." << std::endl + << "Build: " << DEV_QUOTED(ETH_BUILD_PLATFORM) << "/" << DEV_QUOTED(ETH_BUILD_TYPE) << std::endl; + exit(0); +} + +int main(int argc, char** argv) +{ + std::string infile; + + for (int i = 1; i < argc; ++i) + { + std::string arg = argv[i]; + if (arg == "-h" || arg == "--help") + help(); + else if (arg == "-V" || arg == "--version") + version(); + else + infile = argv[i]; + } + + std::string src; + if (infile.empty()) + { + std::string s; + while (!std::cin.eof()) + { + getline(std::cin, s); + src.append(s); + } + } else { + src = dev::asString(dev::contents(infile)); + } + + std::cout << "Parsing..." << std::endl; + // @todo catch exception + dev::solidity::ptr ast = dev::solidity::parseAST(src); + std::cout << "Syntax tree for the contract:" << std::endl; + dev::solidity::ASTPrinter printer(ast, src); + printer.print(std::cout); + return 0; +}