/* * Copyright 1993, 1995 Christopher Seiwald. * * This file is part of Jam - see jam.c for Copyright information. */ /* This file is ALSO: Copyright 2022 René Ferdinand Rivera Morell Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt) */ /* * scan.h - the jam yacc scanner * * External functions: * yyerror( char *s ) - print a parsing error message. * yyfparse( char *s ) - scan include file s. * yylex() - parse the next token, returning its type. * yymode() - adjust lexicon of scanner. * yyparse() - declaration for yacc parser. * yyanyerrors() - indicate if any parsing errors occurred. * * The yymode() function is for the parser to adjust the lexicon of the scanner. * Aside from normal keyword scanning, there is a mode to handle action strings * (look only for the closing }) and a mode to ignore most keywords when looking * for a punctuation keyword. This allows non-punctuation keywords to be used in * lists without quoting. */ #include "config.h" #include "lists.h" #include "parse.h" #include "value.h" /* * YYSTYPE - value of a lexical token */ #define YYSTYPE YYSYMBOL typedef struct _YYSTYPE { int type; b2::value_ptr string; PARSE * parse; list_ptr list; int number; b2::value_ptr file; int line; char const * keyword; } YYSTYPE; extern YYSTYPE yylval; int yymode(int n); void yyerror(char const * s); int yyanyerrors(); void yyfparse(OBJECT * s); void yyfdone(void); void yysparse(OBJECT * name, const char ** lines); int yyline(); int yylex(); int yyparse(); void yyinput_last_read_token(OBJECT ** name, int * line); #define SCAN_NORMAL 0 /* normal parsing */ #define SCAN_STRING 1 /* look only for matching } */ #define SCAN_PUNCT 2 /* only punctuation keywords */ #define SCAN_COND 3 /* look for operators that can appear in conditions. */ #define SCAN_PARAMS 4 /* The parameters of a rule "()*?+" */ #define SCAN_CALL 5 /* Inside a rule call. [].*/ #define SCAN_CASE 6 /* A case statement. We only recognize ':' as special. */ #define SCAN_CONDB \ 7 /* The beginning of a condition (ignores leading comparison operators, \ so that if in $(y) works.)*/ #define SCAN_ASSIGN \ 8 /* The list may be terminated by an assignment operator. */ #define SCAN_XASSIGN \ 9 /* The next token might be an assignment, but to token afterwards \ cannot. */