Rename checker to tprcc
This commit is contained in:
2
tprcc/.gitignore
vendored
Normal file
2
tprcc/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*.o
|
||||
build/*
|
41
tprcc/CMakeLists.txt
Normal file
41
tprcc/CMakeLists.txt
Normal file
@@ -0,0 +1,41 @@
|
||||
cmake_minimum_required(VERSION 3.8)
|
||||
project(tprcc LANGUAGES CXX)
|
||||
|
||||
set (CMAKE_CXX_STANDARD 17)
|
||||
|
||||
aux_source_directory("src" SRC_DIR)
|
||||
|
||||
set (SRC_GENERATED "${CMAKE_CURRENT_BINARY_DIR}/tpr-parser.cpp" "${CMAKE_CURRENT_BINARY_DIR}/tpr-scanner.cpp")
|
||||
|
||||
set (SOURCES
|
||||
${SRC_DIR}
|
||||
${SRC_GENERATED}
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/parser/tpr.l
|
||||
OUTPUT
|
||||
${CMAKE_CURRENT_BINARY_DIR}/tpr-scanner.cpp
|
||||
COMMAND
|
||||
flex -+ -o "${CMAKE_CURRENT_BINARY_DIR}/tpr-scanner.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/parser/tpr.l"
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/parser/tpr.ypp
|
||||
OUTPUT
|
||||
${CMAKE_CURRENT_BINARY_DIR}/tpr-parser.cpp
|
||||
COMMAND
|
||||
mkdir -p "${CMAKE_CURRENT_BINARY_DIR}/generated" && bison -o"${CMAKE_CURRENT_BINARY_DIR}/tpr-parser.cpp" --header="${CMAKE_CURRENT_BINARY_DIR}/generated/tpr-parser.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/parser/tpr.ypp"
|
||||
)
|
||||
|
||||
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(${SRC_GENERATED} PROPERTIES GENERATED 1)
|
||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/generated")
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||
# TEMPORARY FIx:
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
|
38
tprcc/include/tpr/tpr-scanner.hpp
Normal file
38
tprcc/include/tpr/tpr-scanner.hpp
Normal file
@@ -0,0 +1,38 @@
|
||||
#ifndef _TPR_SCANNER_HPP_
|
||||
#define _TPR_SCANNER_HPP_
|
||||
|
||||
|
||||
#if ! defined(yyFlexLexerOnce)
|
||||
#include <FlexLexer.h>
|
||||
#endif
|
||||
|
||||
#include "tpr-parser.hpp"
|
||||
#include "location.hh"
|
||||
|
||||
namespace tpr {
|
||||
|
||||
class TempProfileScanner : public yyFlexLexer{
|
||||
public:
|
||||
|
||||
TempProfileScanner(std::istream *in) : yyFlexLexer(in) {
|
||||
};
|
||||
virtual ~TempProfileScanner() {};
|
||||
|
||||
//get rid of override virtual function warning
|
||||
using FlexLexer::yylex;
|
||||
|
||||
virtual
|
||||
int yylex( tpr::TempProfileParser::semantic_type * const lval,
|
||||
tpr::TempProfileParser::location_type *loc );
|
||||
// YY_DECL defined in mc_lexer.l
|
||||
// Method body created by flex in mc_lexer.yy.cc
|
||||
|
||||
private:
|
||||
/* yyval ptr */
|
||||
tpr::TempProfileParser::semantic_type *yylval = nullptr;
|
||||
};
|
||||
|
||||
} /* end namespace MC */
|
||||
|
||||
|
||||
#endif /* _TPR_SCANNER_HPP_ */
|
43
tprcc/parser/tpr.l
Normal file
43
tprcc/parser/tpr.l
Normal file
@@ -0,0 +1,43 @@
|
||||
%{
|
||||
#include <tpr/tpr-scanner.hpp>
|
||||
#include <string>
|
||||
#undef YY_DECL
|
||||
#define YY_DECL int tpr::TempProfileScanner::yylex(tpr::TempProfileParser::semantic_type * const lval, tpr::TempProfileParser::location_type *loc )
|
||||
|
||||
#define YY_USER_ACTION loc->step(); loc->columns(yyleng);
|
||||
|
||||
using token = tpr::TempProfileParser::token;
|
||||
|
||||
%}
|
||||
|
||||
%option yyclass="tpr::TempProfileScanner"
|
||||
%option noyywrap
|
||||
%option never-interactive
|
||||
%option c++
|
||||
|
||||
/* Predefined rules */
|
||||
NEWLINE "\n"|"\r\n"
|
||||
COMMENT_LINE "#".*\n
|
||||
SPACE "\t"|" "
|
||||
NUM [-+]?([0-9]*\.[0-9]+|[0-9]+)
|
||||
|
||||
%%
|
||||
|
||||
<*>{SPACE} { /*Ignore spaces */}
|
||||
{COMMENT_LINE} {loc->lines(); return token::lineend;}
|
||||
{NEWLINE} {loc->lines(); return token::lineend;}
|
||||
{NUM} {yylval->build<float>(std::stof(std::string(yytext))); return token::number;}
|
||||
|
||||
pid_conf { return token::kw_pid_conf; }
|
||||
temp_set { return token::kw_temp_set; }
|
||||
wait_temp { return token::kw_wait_temp; }
|
||||
wait_time { return token::kw_wait_time; }
|
||||
temp_ramp { return token::kw_temp_ramp; }
|
||||
beep { return token::kw_beep; }
|
||||
temp_off { return token::kw_temp_off; }
|
||||
clear_flags { return token::kw_clear_flags; }
|
||||
digio_conf { return token::kw_digio_conf; }
|
||||
digio_set { return token::kw_digio_set; }
|
||||
digio_wait { return token::kw_digio_wait; }
|
||||
|
||||
%%
|
100
tprcc/parser/tpr.ypp
Normal file
100
tprcc/parser/tpr.ypp
Normal file
@@ -0,0 +1,100 @@
|
||||
|
||||
%language "c++"
|
||||
%require "3.2"
|
||||
%defines
|
||||
%define api.namespace {tpr}
|
||||
%define api.parser.class {TempProfileParser}
|
||||
|
||||
%define parse.error verbose
|
||||
|
||||
%code requires{
|
||||
namespace tpr {
|
||||
class TempProfileScanner;
|
||||
}
|
||||
}
|
||||
|
||||
%parse-param { TempProfileScanner &scanner }
|
||||
|
||||
%code {
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <fstream>
|
||||
#include <utility>
|
||||
#include <tuple>
|
||||
#include <tpr/tpr-scanner.hpp>
|
||||
#undef yylex
|
||||
#define yylex scanner.yylex
|
||||
}
|
||||
|
||||
%define api.value.type variant
|
||||
%locations
|
||||
%start tpr_file
|
||||
|
||||
%token<float> number
|
||||
%token lineend
|
||||
%token kw_pid_conf
|
||||
%token kw_temp_set
|
||||
%token kw_wait_temp
|
||||
%token kw_wait_time
|
||||
%token kw_temp_ramp
|
||||
%token kw_beep
|
||||
%token kw_temp_off
|
||||
%token kw_clear_flags
|
||||
%token kw_digio_conf
|
||||
%token kw_digio_set
|
||||
%token kw_digio_wait
|
||||
|
||||
%%
|
||||
|
||||
tpr_file: tpr_command
|
||||
| tpr_file tpr_command
|
||||
;
|
||||
|
||||
|
||||
tpr_command: tpr_command_inner lineend
|
||||
| lineend
|
||||
;
|
||||
|
||||
tpr_command_inner: cmd_pid_conf;
|
||||
| cmd_temp_set
|
||||
| cmd_wait_temp
|
||||
| cmd_wait_time
|
||||
| cmd_temp_ramp
|
||||
| cmd_beep
|
||||
| cmd_temp_off
|
||||
| cmd_clear_flags
|
||||
| cmd_digio_conf
|
||||
| cmd_digio_set
|
||||
| cmd_digio_wait
|
||||
;
|
||||
|
||||
|
||||
cmd_pid_conf: kw_pid_conf number number number number number number;
|
||||
|
||||
cmd_temp_set: kw_temp_set number;
|
||||
|
||||
cmd_wait_temp: kw_wait_temp number;
|
||||
|
||||
cmd_wait_time: kw_wait_time number;
|
||||
|
||||
cmd_temp_ramp: kw_temp_ramp number number;
|
||||
|
||||
cmd_beep: kw_beep number;
|
||||
|
||||
cmd_temp_off: kw_temp_off;
|
||||
|
||||
cmd_clear_flags: kw_clear_flags;
|
||||
|
||||
cmd_digio_conf: kw_digio_conf number number;
|
||||
|
||||
cmd_digio_set: kw_digio_set number number;
|
||||
|
||||
cmd_digio_wait: kw_digio_wait number number;
|
||||
|
||||
%%
|
||||
|
||||
void tpr::TempProfileParser::error(const location_type &l, const std::string &err_message)
|
||||
{
|
||||
std::cerr << "Error " << err_message << " at " << l << std::endl;
|
||||
std::abort();
|
||||
}
|
8
tprcc/src/main.cpp
Normal file
8
tprcc/src/main.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
std::cout << "Hello world" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user