From f3830138661374ca10fe6a0b6f2f4b949dea3e5c Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sun, 15 Jun 2014 16:31:14 +0200 Subject: Switch to sqlite3's lemon parser generator. This commit drops the flex + bison code in favor to a hand-written lexer and a new grammar file in lemon syntax. The change results in a much smaller binary and easier to maintain code. Code required to build and maintain the AST has been split off into the ast.c and ast.h files. Signed-off-by: Jo-Philipp Wich --- CMakeLists.txt | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index ef1a089..8db786e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) PROJECT(jsonpath C) -ADD_DEFINITIONS(-Os -Wall -Werror --std=gnu99 -Wmissing-declarations -ffunction-sections) +ADD_DEFINITIONS(-Os -Wall -Werror --std=gnu99 -Wmissing-declarations -Wno-error=unused-variable -ffunction-sections -D_GNU_SOURCE) SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-Wl,--gc-sections") @@ -23,29 +23,23 @@ IF(JSONC_FOUND) INCLUDE_DIRECTORIES(${JSONC_INCLUDE_DIRS}) ENDIF() -FIND_PACKAGE(BISON REQUIRED) -IF(BISON_FOUND) - ADD_CUSTOM_COMMAND( - OUTPUT parser.c - DEPENDS parser.y - COMMAND ${BISON_EXECUTABLE} parser.y - COMMENT "Generating parser.c" - ) -ENDIF() - -FIND_PACKAGE(FLEX REQUIRED) -IF(FLEX_FOUND) - ADD_CUSTOM_COMMAND( - OUTPUT lexer.c - DEPENDS lexer.l - COMMAND ${FLEX_EXECUTABLE} lexer.l - COMMENT "Generating lexer.c" - ) -ENDIF() - -SET_PROPERTY(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "lexer.h;parser.h") -SET_SOURCE_FILES_PROPERTIES("lexer.c;parser.c" PROPERTIES GENERATED TRUE) -ADD_EXECUTABLE(jsonpath main.c lexer.c parser.c matcher.c) +ADD_CUSTOM_COMMAND( + OUTPUT contrib/lemon + DEPENDS contrib/lemon.c contrib/lempar.c + COMMAND gcc -o contrib/lemon contrib/lemon.c + COMMENT "Generating lemon parser generator" +) + +ADD_CUSTOM_COMMAND( + OUTPUT parser.c + DEPENDS parser.y contrib/lemon + COMMAND ./contrib/lemon parser.y + COMMENT "Generating parser.c" +) + +SET_PROPERTY(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "lemon;parser.h;parser.out") +SET_SOURCE_FILES_PROPERTIES("parser.c" PROPERTIES GENERATED TRUE) +ADD_EXECUTABLE(jsonpath main.c ast.c lexer.c parser.c matcher.c) TARGET_LINK_LIBRARIES(jsonpath ubox ${json}) INSTALL(TARGETS jsonpath RUNTIME DESTINATION bin) -- cgit v1.2.1