130fa30b1SMasatake YAMATO /* 230fa30b1SMasatake YAMATO * Copyright (c) 2003-2004, Ascher Stefan <stievie@utanet.at> 330fa30b1SMasatake YAMATO * Copyright (c) 2020, Masatake YAMATO 430fa30b1SMasatake YAMATO * Copyright (c) 2020, Red Hat, Inc. 530fa30b1SMasatake YAMATO * 630fa30b1SMasatake YAMATO * This source code is released for free distribution under the terms of the 730fa30b1SMasatake YAMATO * GNU General Public License version 2 or (at your option) any later version. 830fa30b1SMasatake YAMATO */ 930fa30b1SMasatake YAMATO 1030fa30b1SMasatake YAMATO #ifndef CTAGS_PARSER_R_H 1130fa30b1SMasatake YAMATO #define CTAGS_PARSER_R_H 1230fa30b1SMasatake YAMATO 1330fa30b1SMasatake YAMATO /* 1430fa30b1SMasatake YAMATO * INCLUDE FILES 1530fa30b1SMasatake YAMATO */ 1630fa30b1SMasatake YAMATO 1730fa30b1SMasatake YAMATO #include "general.h" /* must always come first */ 1830fa30b1SMasatake YAMATO 1930fa30b1SMasatake YAMATO #include "subparser.h" 2030fa30b1SMasatake YAMATO #include "tokeninfo.h" 2130fa30b1SMasatake YAMATO #include "entry.h" 2230fa30b1SMasatake YAMATO 2330fa30b1SMasatake YAMATO 2430fa30b1SMasatake YAMATO /* 2530fa30b1SMasatake YAMATO * DATA DECLARATIONS 2630fa30b1SMasatake YAMATO */ 2730fa30b1SMasatake YAMATO 2830fa30b1SMasatake YAMATO typedef struct sRSubparser rSubparser; 2930fa30b1SMasatake YAMATO 3030fa30b1SMasatake YAMATO enum RTokenType { 3130fa30b1SMasatake YAMATO /* 0..255 are the byte's values */ 3230fa30b1SMasatake YAMATO TOKEN_R_EOF = 256, 3330fa30b1SMasatake YAMATO TOKEN_R_UNDEFINED, 3430fa30b1SMasatake YAMATO TOKEN_R_KEYWORD, 3530fa30b1SMasatake YAMATO TOKEN_R_NEWLINE, 3630fa30b1SMasatake YAMATO TOKEN_R_NUMBER, /* 1, 1L */ 3730fa30b1SMasatake YAMATO TOKEN_R_SYMBOL, /* [0-9a-zA-Z._] */ 3830fa30b1SMasatake YAMATO TOKEN_R_STRING, 3930fa30b1SMasatake YAMATO TOKEN_R_OPERATOR, /* - + ! ~ ? : * / ^ %...%, <, > == 4030fa30b1SMasatake YAMATO * >=, <=, &, &&, |, || */ 4130fa30b1SMasatake YAMATO TOKEN_R_DOTS, /* ... */ 4230fa30b1SMasatake YAMATO TOKEN_R_DOTS_N, /* ..1, ..2, etc */ 4330fa30b1SMasatake YAMATO TOKEN_R_LASSIGN, /* <-, <<- */ 4430fa30b1SMasatake YAMATO TOKEN_R_RASSIGN, /* ->, ->> */ 4530fa30b1SMasatake YAMATO TOKEN_R_SCOPE, /* ::, ::: */ 4630fa30b1SMasatake YAMATO }; 4730fa30b1SMasatake YAMATO 4830fa30b1SMasatake YAMATO enum eRKeywordId 4930fa30b1SMasatake YAMATO { 50cd905678SMasatake YAMATO KEYWORD_R_C, 51*09bc94cdSMasatake YAMATO KEYWORD_R_DATAFRAME, 5230fa30b1SMasatake YAMATO KEYWORD_R_FUNCTION, 5330fa30b1SMasatake YAMATO KEYWORD_R_IF, 5430fa30b1SMasatake YAMATO KEYWORD_R_ELSE, 5530fa30b1SMasatake YAMATO KEYWORD_R_FOR, 5630fa30b1SMasatake YAMATO KEYWORD_R_WHILE, 5730fa30b1SMasatake YAMATO KEYWORD_R_REPEAT, 5830fa30b1SMasatake YAMATO KEYWORD_R_IN, 5930fa30b1SMasatake YAMATO KEYWORD_R_NEXT, 6030fa30b1SMasatake YAMATO KEYWORD_R_BREAK, 6130fa30b1SMasatake YAMATO KEYWORD_R_TRUE, 6230fa30b1SMasatake YAMATO KEYWORD_R_FALSE, 6330fa30b1SMasatake YAMATO KEYWORD_R_NULL, 6430fa30b1SMasatake YAMATO KEYWORD_R_INF, 652b000035SMasatake YAMATO KEYWORD_R_LIST, 6630fa30b1SMasatake YAMATO KEYWORD_R_NAN, 6730fa30b1SMasatake YAMATO KEYWORD_R_NA, 6830fa30b1SMasatake YAMATO KEYWORD_R_SOURCE, 6930fa30b1SMasatake YAMATO KEYWORD_R_LIBRARY, 7030fa30b1SMasatake YAMATO }; 7130fa30b1SMasatake YAMATO 7230fa30b1SMasatake YAMATO struct sRSubparser { 7330fa30b1SMasatake YAMATO subparser subparser; 7430fa30b1SMasatake YAMATO int (* readRightSideSymbol) (rSubparser *s, 7530fa30b1SMasatake YAMATO tokenInfo *const symbol, 7630fa30b1SMasatake YAMATO const char *const assignmentOperator, 7730fa30b1SMasatake YAMATO int parent, 7830fa30b1SMasatake YAMATO tokenInfo *const token); 7930fa30b1SMasatake YAMATO int (* makeTagWithTranslation) (rSubparser *s, 8030fa30b1SMasatake YAMATO tokenInfo *const token, 8130fa30b1SMasatake YAMATO int parent, 8230fa30b1SMasatake YAMATO bool in_func, 8330fa30b1SMasatake YAMATO int kindInR, 8430fa30b1SMasatake YAMATO const char *const assignmentOperator); 8530fa30b1SMasatake YAMATO bool (* askTagAcceptancy) (rSubparser *s, tagEntryInfo *pe); 86582f04dcSMasatake YAMATO bool (* hasFunctionAlikeKind) (rSubparser *s, tagEntryInfo *pe); 87d1586adcSMasatake YAMATO int (* readFuncall) (rSubparser *s, 88d1586adcSMasatake YAMATO tokenInfo *const func, 89d1586adcSMasatake YAMATO tokenInfo *const token, 90d1586adcSMasatake YAMATO int parent); 9130fa30b1SMasatake YAMATO }; 9230fa30b1SMasatake YAMATO 93c1117bc9SMasatake YAMATO extern void rSetupCollectingSignature (tokenInfo *const token, 94c1117bc9SMasatake YAMATO vString *signature); 95c1117bc9SMasatake YAMATO extern void rTeardownCollectingSignature (tokenInfo *const token); 9630fa30b1SMasatake YAMATO 9730fa30b1SMasatake YAMATO /* 9830fa30b1SMasatake YAMATO * FUNCTION PROTOTYPES 9930fa30b1SMasatake YAMATO */ 10030fa30b1SMasatake YAMATO 1018fa3486cSMasatake YAMATO extern tokenInfo *rNewToken (void); 1028fa3486cSMasatake YAMATO 10330fa30b1SMasatake YAMATO extern void rTokenReadNoNewline (tokenInfo *const token); 104acc50dcaSMasatake YAMATO 105acc50dcaSMasatake YAMATO /* This function returns true if a new token is read. 106acc50dcaSMasatake YAMATO * EOF is exception. If EOF is read, this function returns FALSE. */ 107acc50dcaSMasatake YAMATO extern bool rParseStatement (tokenInfo *const token, int parentIndex, bool inArgList); 108acc50dcaSMasatake YAMATO 1097852270eSMasatake YAMATO extern vString *rExtractNameFromString (vString* str); 1107852270eSMasatake YAMATO 11130fa30b1SMasatake YAMATO #endif /* CTAGS_PARSER_TEX_H */ 112