xref: /Universal-ctags/parsers/r.h (revision 09bc94cd8432980b267e435c322fbcf611c5fec9)
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