1 /*=========================================================================== 2 * 3 * PUBLIC DOMAIN NOTICE 4 * National Center for Biotechnology Information 5 * 6 * This software/database is a "United States Government Work" under the 7 * terms of the United States Copyright Act. It was written as part of 8 * the author's official duties as a United States Government employee and 9 * thus cannot be copyrighted. This software/database is freely available 10 * to the public for use. The National Library of Medicine and the U.S. 11 * Government have not placed any restriction on its use or reproduction. 12 * 13 * Although all reasonable efforts have been taken to ensure the accuracy 14 * and reliability of the software and data, the NLM and the U.S. 15 * Government do not and cannot warrant the performance or results that 16 * may be obtained by using this software or data. The NLM and the U.S. 17 * Government disclaim all warranties, express or implied, including 18 * warranties of performance, merchantability or fitness for any particular 19 * purpose. 20 * 21 * Please cite the author in any work or product based on this material. 22 * 23 * =========================================================================== 24 * 25 */ 26 27 #ifndef _h_kfg_lex_ 28 #define _h_kfg_lex_ 29 30 #include <string.h> 31 #include <stdbool.h> 32 33 typedef struct KFGToken 34 { 35 const char* tokenText; 36 size_t tokenLength; 37 int tokenId; 38 size_t line_no; 39 size_t column_no; 40 } KFGToken; 41 42 typedef struct KFGScanBlock 43 { 44 void* scanner; 45 void* buffer; 46 void* self; 47 const char* file; 48 KFGToken* lastToken; /* used for error reporting */ 49 bool (*look_up_var)(void * self, struct KFGToken*); 50 void (*report_error)(struct KFGScanBlock* sb, const char* msg); 51 } KFGScanBlock; 52 53 struct VNamelist; 54 typedef union 55 { 56 KFGToken pb; 57 struct VNamelist* namelist; 58 } KFGSymbol; 59 60 extern bool KFGScan_yylex_init(KFGScanBlock* sb, const char *str); /* false = out of memory */ 61 extern void KFGScan_yylex_destroy(KFGScanBlock* sb); 62 63 extern void KFGScan_set_debug(bool on, KFGScanBlock* scannerContext); 64 65 extern int KFGScan_yylex(KFGSymbol* pb, KFGScanBlock* scannerContext); 66 67 #endif /* _h_kfg_lex_ */ 68