s4g  0.9.2
высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++.
s4g_lexer.h
См. документацию.
1 
2 /*
3 Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
4 license MIT see in LICENSE or
5 https://s4g.su/
6 */
7 
13 #ifndef s4g_lexer_h
14 #define s4g_lexer_h
15 
16 #include "s4g_types.h"
17 #include "s4g_preprocessor.h"
18 #include "s4g_parse.h"
19 
27 int s4g_lex_is_syms_arithmetic(const char *szSrc, char *szDst);
29 
31 int s4g_lex_is_syms_assign_arithmetic(const char *szSrc, char *szDst);
32 
34 int s4g_lex_is_syms_assign_bit(const char *szSrc, char *szDst);
35 
37 int s4g_lex_is_syms_logic(const char *szSrc, char *szDst);
38 
40 int s4g_lex_is_syms_bit(const char *szSrc, char *szDst);
41 
42 
44 int s4g_lex_is_assign(const char *szSrc, char *szDst);
45 
47 int s4g_lex_is_delimiter(const char *szSrc, char *szDst);
48 
50 int s4g_lex_is_group_expr(const char *szSrc, char *szDst);
51 
53 int s4g_lex_is_group_data(const char *szSrc, char *szDst);
54 
56 int s4g_lex_is_access2object(const char *szSrc, char *szDst);
57 
59 
60 
64 bool s4g_lex_is_char_str(const char cSym);
66 
68 bool s4g_lex_is_char_num_or_point(const char cSym);
69 
71 bool s4g_lex_is_char_num(const char cSym);
72 
74 
75 
79 void s4g_lex_scan_string(const char *szSrc, char * szDst);
81 
83 void s4g_lex_scan_litstring(const char *szSrc, String *sDest, int &iLen);
84 
86 int s4g_lex_scan_num(const char *szSrc, char *szDst);
87 
89 
91 int s4g_lex_is_key_word(const char *szSrc);
92 
94 int s4g_lex_is_key_word_pp(const char *szSrc);
95 
96 //##########################################################################
97 
99 class s4g_Lexer
100 {
101 public:
102  s4g_Lexer();
103  ~s4g_Lexer();
104 
105  void clear();
106 
108  int read(
109  const char *szFileOrStr,
110  bool isFile = true
111  );
112 
113  ID getCount();
114 
115  ID getCurrPos();
116  void setCurrPos(ID id);
117 
118  s4g_Lexeme* getLexeme(ID id);
122 
123  ID getCountFile();
124  const char* getFile(ID id);
125  const char* getErrorText();
126 
128  bool isDefined(const String &sStr) { /*return m_oPreprocessor.isDefined(str);*/ return false; }
129 
131  void define(const char *szDefine) { m_oPreprocessor.define(szDefine); }
132 
134  void undef(const String &sDefine){ m_oPreprocessor.undef(sDefine); }
135 
137  void addIncPath(const String &sPath){ m_oPreprocessor.addIncPath(sPath); }
138 
139 protected:
140  friend s4g_Main;
141 
143  s4g_Lexeme* genLexeme(const char *szCode, int &iCurrPos, int &iCurrStr);
144 
145  Array<s4g_Lexeme*> m_aLexs;
146  Array<String> m_aFiles;
149  MemAlloc<s4g_Lexeme> m_oPoolLex;
152  char m_szError[1024];
153 };
154 
156 
157 #endif
void define(const char *def, int len=0, bool bTemp=false)
Обьявляет новый дефайн
Definition: s4g_preprocessor.cpp:91
Заголовочный файл с основными типами и данными для парсинга кода
ID getCount()
возвращает общее количество лексем
Definition: s4g_lexer.cpp:765
ID getCurrPos()
возвращает текущую позицию в массиве лексем
Definition: s4g_lexer.cpp:770
ID m_idCurrFile
текущий id файла
Definition: s4g_lexer.h:147
bool s4g_lex_is_char_num_or_point(const char cSym)
числом либо точкой
Definition: s4g_lexer.cpp:284
препроцессор
Definition: s4g_preprocessor.h:39
void clear()
очитска
Definition: s4g_lexer.cpp:428
void setCurrPos(ID id)
устанавливаем текущую позицию в массиве лексем
Definition: s4g_lexer.cpp:775
int s4g_lex_is_group_expr(const char *szSrc, char *szDst)
символом группировки выражений
Definition: s4g_lexer.cpp:199
bool s4g_lex_is_char_str(const char cSym)
буквой либо нижним пробелом
Definition: s4g_lexer.cpp:279
void s4g_lex_scan_litstring(const char *szSrc, String *sDest, int &iLen)
пользовательской строки (строкового литерала)
Definition: s4g_lexer.cpp:314
void define(const char *szDefine)
обьявляет новый дефайн
Definition: s4g_lexer.h:131
int s4g_lex_is_access2object(const char *szSrc, char *szDst)
символом обращения к объекту
Definition: s4g_lexer.cpp:251
const char * getFile(ID id)
возвращает имя файла по его id (порядковому номеру загрузки)
Definition: s4g_lexer.cpp:824
ID getCountFile()
возвращает количество загруженных файлов
Definition: s4g_lexer.cpp:819
int s4g_lex_is_syms_logic(const char *szSrc, char *szDst)
логическим символом
Definition: s4g_lexer.cpp:92
int s4g_lex_is_assign(const char *szSrc, char *szDst)
символом присваиванием
Definition: s4g_lexer.cpp:147
int s4g_lex_is_key_word(const char *szSrc)
является ли слово ключевым языковым, возвращает -1 в случае отрицательного результата, иначе id.
Definition: s4g_lexer.cpp:391
лексема
Definition: s4g_parse.h:342
int s4g_lex_is_key_word_pp(const char *szSrc)
является ли слово ключевым из препроцессора, возвращает -1 в случае отрицательного результата...
Definition: s4g_lexer.cpp:402
s4g_Lexeme * getLexeme(ID id)
возвращает лексему по id.
Definition: s4g_lexer.cpp:758
ID m_idCurrLex
текущий id лексемы
Definition: s4g_lexer.h:148
int read(const char *szFileOrStr, bool isFile=true)
чтение исходного кода из файла или строки
Definition: s4g_lexer.cpp:610
s4g_Main * s4gm
владалец
Definition: s4g_lexer.h:150
int s4g_lex_is_syms_assign_arithmetic(const char *szSrc, char *szDst)
арифметическим сиволом с присваиванием
Definition: s4g_lexer.cpp:39
const char * getErrorText()
возвращает текст ошибки
Definition: s4g_lexer.cpp:832
s4g_Lexeme * getLexemeNext()
возвращает следующую лексему, увеливая внутренний счетчик позиции
Definition: s4g_lexer.cpp:789
void s4g_lex_scan_string(const char *szSrc, char *szDst)
слова состоящего из букв и цифр
Definition: s4g_lexer.cpp:296
void undef(const String &sDefine)
удаляет указанный дефайн
Definition: s4g_lexer.h:134
bool s4g_lex_is_char_num(const char cSym)
числом
Definition: s4g_lexer.cpp:289
char m_szError[1024]
строка с сообщением об ошибке
Definition: s4g_lexer.h:152
bool isDefined(const String &sStr)
объявлен ли дефайн
Definition: s4g_lexer.h:128
лексический анализатор
Definition: s4g_lexer.h:99
int s4g_lex_is_group_data(const char *szSrc, char *szDst)
символом группировки данных
Definition: s4g_lexer.cpp:225
int s4g_lex_is_syms_bit(const char *szSrc, char *szDst)
битовым символом
Definition: s4g_lexer.cpp:119
void undef(const String &def)
Удаляет указанный дефайн
Definition: s4g_preprocessor.cpp:189
void addIncPath(const String &sPath)
добавляет путь поиска включаемых файлов
Definition: s4g_lexer.h:137
s4g_Lexeme * genLexeme(const char *szCode, int &iCurrPos, int &iCurrStr)
генерация первой лексемы из szCode.
Definition: s4g_lexer.cpp:436
void addIncPath(const String &s)
Добавляет путь поиска включаемых файлов
Definition: s4g_preprocessor.cpp:196
основа взаимодествия
Definition: s4g_main.h:45
Array< String > m_aFiles
массив путей до файлов (загруженных)
Definition: s4g_lexer.h:146
s4g_Lexeme * getLexemePrev()
возвращает предыдуую лексему, уменьшая внутренний счетчик позиции
Definition: s4g_lexer.cpp:804
int s4g_lex_is_syms_arithmetic(const char *szSrc, char *szDst)
арифметическим символом
Definition: s4g_lexer.cpp:12
Заголовочный файл с основными типами данных
Array< s4g_Lexeme * > m_aLexs
массив лексем
Definition: s4g_lexer.h:145
int s4g_lex_is_delimiter(const char *szSrc, char *szDst)
символом разделителем
Definition: s4g_lexer.cpp:173
s4g_Preprocessor m_oPreprocessor
объект препроцессора
Definition: s4g_lexer.h:151
int s4g_lex_is_syms_assign_bit(const char *szSrc, char *szDst)
битовым сиволом с присваиванием
Definition: s4g_lexer.cpp:66
int s4g_lex_scan_num(const char *szSrc, char *szDst)
числа
Definition: s4g_lexer.cpp:361
s4g_Lexeme * getLexemeCurr()
возвращает текущую лексему
Definition: s4g_lexer.cpp:781
MemAlloc< s4g_Lexeme > m_oPoolLex
пул памяти для лексем
Definition: s4g_lexer.h:149
Заголовочный файл препроцессора