Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
2.6 KiB

/*
* Copyright(C) 1999-2020, 2022 National Technology & Engineering Solutions
* of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
* NTESS, the U.S. Government retains certain rights in this software.
*
* See packages/seacas/LICENSE for details
*/
#ifndef EXAMPLE_SCANNER_H
#define EXAMPLE_SCANNER_H
// Flex expects the signature of yylex to be defined in the macro YY_DECL, and
// the C++ parser expects it to be declared. We can factor both as follows.
#ifndef YY_DECL
#define YY_DECL SEAMS::Parser::token_type SEAMS::Scanner::lex(SEAMS::Parser::semantic_type *yylval)
#endif
#ifndef __FLEX_LEXER_H
#define yyFlexLexer SEAMSFlexLexer
#include "FlexLexer.h"
#undef yyFlexLexer
#endif
#include <iostream>
namespace SEAMS {
/** Scanner is a derived class to add some extra function to the scanner
* class. Flex itself creates a class named yyFlexLexer, which is renamed using
* macros to SEAMSFlexLexer. However we change the context of the generated
* yylex() function to be contained within the Scanner class. This is required
* because the yylex() defined in SEAMSFlexLexer has no parameters. */
class Scanner : public SEAMSFlexLexer
{
public:
friend class Parser;
/** Create a new scanner object. The streams arg_yyin and arg_yyout default
* to cin and cout, but that assignment is only made when initializing in
* yylex(). */
explicit Scanner(Aprepro &aprepro_yyarg, std::istream *in = nullptr,
std::ostream *out = nullptr);
/** Required for virtual functions */
~Scanner() override;
bool add_include_file(const std::string &filename, bool must_exist);
int yywrap() override;
void yyerror(const char *s);
void LexerOutput(const char *buf, int size) override;
int LexerInput(char *buf, int max_size) override;
/** This is the main lexing function. It is generated by flex according to
* the macro declaration YY_DECL above. The generated bison parser then
* calls this virtual function to fetch new tokens. */
virtual Parser::token_type lex(Parser::semantic_type *yylval);
char *rescan(char *string);
char *execute(char *string);
char *import_handler(char *string);
char *if_handler(double x);
char *elseif_handler(double x);
char *switch_handler(double x);
char *case_handler(double x);
/** Enable debug output (via arg_yyout) if compiled into the scanner. */
void set_debug(bool b);
/* User arguments. */
class Aprepro &aprepro;
/* save the original string for substitution history */
void save_history_string();
};
} // namespace SEAMS
#endif // EXAMPLE_SCANNER_H