1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
#include "parser.h"
#include <unistd.h>
#include <ctype.h>
#include "../config.h"
#include "../new/new.h"
#include "../builtin/builtin.h"
#include "../yodl/global.h"
#include "../args/args.h"
#include "../file/file.h"
#include "../counter/counter.h"
#include "../message/message.h"
#include "../macro/macro.h"
#include "../symbol/symbol.h"
typedef struct Term
{
char const *text;
int value;
int binop; // + or -
Result result;
}
Term;
bool p_atexit(Parser *pp);
void p_begin_nested(Parser *pp, HANDLER_SET_ELEMENTS newSet);
void p_compute(register Parser *pp, Term *term);
void p_default_symbol(Parser *pp, bool plusPrefix, SymbolType notUsed);
char *p_end_nested(Parser *pp, HANDLER_SET_ELEMENTS newSet);
void p_expand_macro(Parser *pp, HashItem *item);
bool p_handle_insert(Parser *pp); /* insert matched text */
bool p_handle_default_eof(Parser *pp); /* return false F */
bool p_handle_default_newline(Parser *pp); /* series of \n's */
bool p_handle_default_plus(Parser *pp); /* handle + series */
bool p_handle_default_symbol(Parser *pp); /* handle all symbols */
bool p_handle_ignore(Parser *pp); /* ignores token */
bool p_handle_ignore_closepar(Parser *pp); /* handle openpar */
bool p_handle_ignore_openpar(Parser *pp); /* handle openpar */
bool p_handle_noexpand_plus(Parser *pp); /* handle + series */
bool p_handle_noexpand_symbol(Parser *pp); /* handle exec'ed */
/* symbols in NOEXPAND */
bool p_handle_parlist_closepar(Parser *pp); /* handle closepar */
bool p_handle_parlist_openpar(Parser *pp); /* handle openpar */
bool p_handle_skipws_unget(Parser *pp); /* unget rec'ved text F */
bool p_handle_unexpected_eof(Parser *pp); /* EMERG exit */
bool p_handle_unknown(Parser *pp); /* emergency exit */
void p_insert_chartab_ostream(Parser *pp, char const *txt);
void p_insert_chartab_string(Parser *pp, char const *txt);
void p_insert_no_chartab_ostream(Parser *pp, char const *txt);
void p_insert_no_chartab_string(Parser *pp, char const *txt);
void p_insert_nothing(Parser *pp, char const *txt);
void p_macro_args(Parser *pp, String *definition, size_t argc);
char const *p_handler(Parser *pp); /* active handler name */
void p_no_user_macro(register Parser *pp);
void p_paragraph(Parser *pp, String const *sp);
void p_parlist_symbol(Parser *pp, bool plusPrefix, SymbolType mask);
void p_parse(Parser *pp);
bool p_plus_series(Parser *pp, void (*symbol)(Parser *, bool, SymbolType),
SymbolType mask);
void p_setupHandlerSet(void);
void p_value(register Parser *pp, Term *term);
bool p_valueOf(Parser *pp, int *value, char const *txt);
extern bool
(*ps_handlerSet[SIZEOF_HANDLER_SET_ELEMENTS][SIZEOF_TOKEN])(Parser *);
static inline char const *p_matched(register Parser *parserPtr)
{
return lexer_text(&parserPtr->d_lexer);
}
static inline char const *p_fun() /* top of ps_fun_st */
{
return stack_tos(&ps_fun_st)->u_charCp;
}
|