diff --git a/src/.gitignore b/src/.gitignore index a2084f586..0a0be5de3 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -3,3 +3,4 @@ Makefile.in tw-* args calc +lex diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 80b8da1f0..f46db80a8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -49,16 +49,19 @@ set (task_SRCS CLI.cpp CLI.h add_library (task STATIC ${task_SRCS}) add_executable (task_executable main.cpp) add_executable (calc_executable calc.cpp) +add_executable (lex_executable lex.cpp) # Yes, 'task' is included twice, otherwise linking fails on assorted OSes. target_link_libraries (task_executable task commands columns task ${TASK_LIBRARIES}) target_link_libraries (calc_executable task commands columns task ${TASK_LIBRARIES}) +target_link_libraries (lex_executable task commands columns task ${TASK_LIBRARIES}) set_property (TARGET task_executable PROPERTY OUTPUT_NAME "task") install (TARGETS task_executable DESTINATION ${TASK_BINDIR}) set_property (TARGET calc_executable PROPERTY OUTPUT_NAME "calc") +set_property (TARGET lex_executable PROPERTY OUTPUT_NAME "lex") #SET(CMAKE_BUILD_TYPE gcov) #SET(CMAKE_CXX_FLAGS_GCOV "--coverage") diff --git a/src/lex.cpp b/src/lex.cpp new file mode 100644 index 000000000..5f13a82fc --- /dev/null +++ b/src/lex.cpp @@ -0,0 +1,30 @@ +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +Context context; + +int main (int argc, char** argv) +{ + for (auto i = 1; i < argc; i++) + { + std::cout << "input '" << argv[i] << "'\n"; + // Low-level tokens. + Lexer2 lexer (argv[i]); + std::string token; + Lexer2::Type type; + while (lexer.token (token, type)) + std::cout << " token '" << token << "' " << Lexer2::typeToString (type) << "\n"; + +/* + // High-level tokens. + auto all = Lexer2::tokens (argv[i]); + for (auto token : Lexer2::tokens (argv[i])) + std::cout << " token '" << token.first << "' " << Lexer2::typeToString (token.second) << "\n"; +*/ + } +} + +////////////////////////////////////////////////////////////////////////////////