Build: Add a CMake target libeval lemon grammar
The libeval grammar can now be rebuilt with "make libeval_grammar". This is only possible when lemon is installed. Also a couple of modifications to the lemon grammar to account for external changes since the grammer was last generated. Also move the grammar defines into grammar.h - this is how Lemon produces them, and by manually copying into the target .cpp, it make automated regeneration impossible.
This commit is contained in:
parent
49c723fc83
commit
f30f5b3249
|
@ -3,6 +3,8 @@ if( COMPILER_SUPPORTS_WSHADOW )
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WSHADOW_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WSHADOW_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory( libeval )
|
||||||
|
|
||||||
include_directories( BEFORE ${INC_BEFORE} )
|
include_directories( BEFORE ${INC_BEFORE} )
|
||||||
include_directories(
|
include_directories(
|
||||||
./dialogs
|
./dialogs
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
#
|
||||||
|
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2018 Kicad Developers, see AUTHORS.txt for contributors.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, you may find one here:
|
||||||
|
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||||
|
# or you may write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
|
||||||
|
find_program(LEMON lemon)
|
||||||
|
|
||||||
|
if( LEMON )
|
||||||
|
|
||||||
|
macro( generate_lemon_grammar GRAMMAR_LEMON GRAMMAR_C )
|
||||||
|
add_custom_command(
|
||||||
|
DEPENDS ${GRAMMAR_LEMON}
|
||||||
|
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${GRAMMAR_C}
|
||||||
|
COMMAND ${LEMON} -q ${GRAMMAR_LEMON}
|
||||||
|
COMMENT "Running Lemon on ${GRAMMAR_LEMON} -> ${GRAMMAR_C}"
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
generate_lemon_grammar( grammar.lemon grammar.c )
|
||||||
|
|
||||||
|
add_custom_target(libeval_grammar
|
||||||
|
DEPENDS grammar.c
|
||||||
|
)
|
||||||
|
|
||||||
|
endif()
|
|
@ -0,0 +1,12 @@
|
||||||
|
#define VAR 1
|
||||||
|
#define ASSIGN 2
|
||||||
|
#define SEMCOL 3
|
||||||
|
#define PLUS 4
|
||||||
|
#define MINUS 5
|
||||||
|
#define UNIT 6
|
||||||
|
#define DIVIDE 7
|
||||||
|
#define MULT 8
|
||||||
|
#define ENDS 9
|
||||||
|
#define VALUE 10
|
||||||
|
#define PARENL 11
|
||||||
|
#define PARENR 12
|
|
@ -18,7 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
%token_type { numEval::TokenType }
|
%token_type { numEval::TokenType }
|
||||||
%extra_argument { NumericEvaluator* pEval }
|
%extra_argument { NUMERIC_EVALUATOR* pEval }
|
||||||
|
|
||||||
%nonassoc VAR ASSIGN SEMCOL.
|
%nonassoc VAR ASSIGN SEMCOL.
|
||||||
%left PLUS MINUS.
|
%left PLUS MINUS.
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
%include {
|
%include {
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "numeric_evaluator.h"
|
#include <libeval/numeric_evaluator.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
%syntax_error {
|
%syntax_error {
|
||||||
|
|
|
@ -34,6 +34,7 @@ namespace numEval
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "grammar.c"
|
#include "grammar.c"
|
||||||
|
#include "grammar.h"
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
@ -42,20 +43,6 @@ namespace numEval
|
||||||
} /* namespace numEval */
|
} /* namespace numEval */
|
||||||
|
|
||||||
|
|
||||||
#define VAR 1
|
|
||||||
#define ASSIGN 2
|
|
||||||
#define SEMCOL 3
|
|
||||||
#define PLUS 4
|
|
||||||
#define MINUS 5
|
|
||||||
#define UNIT 6
|
|
||||||
#define DIVIDE 7
|
|
||||||
#define MULT 8
|
|
||||||
#define ENDS 9
|
|
||||||
#define VALUE 10
|
|
||||||
#define PARENL 11
|
|
||||||
#define PARENR 12
|
|
||||||
|
|
||||||
|
|
||||||
NUMERIC_EVALUATOR::NUMERIC_EVALUATOR( EDA_UNITS_T aUnits, bool aUseMils )
|
NUMERIC_EVALUATOR::NUMERIC_EVALUATOR( EDA_UNITS_T aUnits, bool aUseMils )
|
||||||
{
|
{
|
||||||
struct lconv* lc = localeconv();
|
struct lconv* lc = localeconv();
|
||||||
|
|
Loading…
Reference in New Issue