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:
John Beard 2018-11-28 13:46:42 +00:00 committed by Maciej Suminski
parent 49c723fc83
commit f30f5b3249
5 changed files with 60 additions and 16 deletions

View File

@ -3,6 +3,8 @@ if( COMPILER_SUPPORTS_WSHADOW )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WSHADOW_FLAGS}")
endif()
add_subdirectory( libeval )
include_directories( BEFORE ${INC_BEFORE} )
include_directories(
./dialogs

View File

@ -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()

12
common/libeval/grammar.h Normal file
View File

@ -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

View File

@ -18,7 +18,7 @@
*/
%token_type { numEval::TokenType }
%extra_argument { NumericEvaluator* pEval }
%extra_argument { NUMERIC_EVALUATOR* pEval }
%nonassoc VAR ASSIGN SEMCOL.
%left PLUS MINUS.
@ -27,7 +27,7 @@
%include {
#include <assert.h>
#include "numeric_evaluator.h"
#include <libeval/numeric_evaluator.h>
}
%syntax_error {

View File

@ -34,6 +34,7 @@ namespace numEval
#endif
#include "grammar.c"
#include "grammar.h"
#ifdef __GNUC__
#pragma GCC diagnostic pop
@ -42,20 +43,6 @@ 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 )
{
struct lconv* lc = localeconv();