├── .gitattributes ├── .gitignore ├── README.md ├── TinyCompiler.sln └── TinyCompiler ├── KeyWord ├── KeyWord.cpp └── KeyWord.h ├── Profiler ├── Profiler.cpp └── Profiler.h ├── Scanner ├── Scanner.cpp └── Scanner.h ├── StatementNode ├── CheckStatementNode │ ├── CheckStatementNode.h │ └── IFCheckStatementNode.h ├── LoopStatementNode │ ├── FORLoopStatementNode.h │ ├── LoopStatementNode.h │ └── WHILELoopStatementNode.h ├── SquenceStatementNode │ ├── ArithmeticSquenceStatementNode.h │ ├── AssignSquenceStatementNode.h │ ├── DefineSquenceStatementNode.h │ └── SquenceStatementNode.h ├── StatementNode.h ├── StatementNodeAttr.h └── StatementNodeInclude.h ├── TinyCompiler.vcxproj ├── TinyCompiler.vcxproj.filters ├── Token ├── Token.cpp ├── Token.h ├── TokenAttr.cpp └── TokenAttr.h └── main.cpp /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | 9 | # Build results 10 | 11 | [Dd]ebug/ 12 | [Rr]elease/ 13 | x64/ 14 | build/ 15 | [Bb]in/ 16 | [Oo]bj/ 17 | 18 | # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets 19 | !packages/*/build/ 20 | 21 | # MSTest test Results 22 | [Tt]est[Rr]esult*/ 23 | [Bb]uild[Ll]og.* 24 | 25 | *_i.c 26 | *_p.c 27 | *.ilk 28 | *.meta 29 | *.obj 30 | *.pch 31 | *.pdb 32 | *.pgc 33 | *.pgd 34 | *.rsp 35 | *.sbr 36 | *.tlb 37 | *.tli 38 | *.tlh 39 | *.tmp 40 | *.tmp_proj 41 | *.log 42 | *.vspscc 43 | *.vssscc 44 | .builds 45 | *.pidb 46 | *.log 47 | *.scc 48 | 49 | # Visual C++ cache files 50 | ipch/ 51 | *.aps 52 | *.ncb 53 | *.opensdf 54 | *.sdf 55 | *.cachefile 56 | 57 | # Visual Studio profiler 58 | *.psess 59 | *.vsp 60 | *.vspx 61 | 62 | # Guidance Automation Toolkit 63 | *.gpState 64 | 65 | # ReSharper is a .NET coding add-in 66 | _ReSharper*/ 67 | *.[Rr]e[Ss]harper 68 | 69 | # TeamCity is a build add-in 70 | _TeamCity* 71 | 72 | # DotCover is a Code Coverage Tool 73 | *.dotCover 74 | 75 | # NCrunch 76 | *.ncrunch* 77 | .*crunch*.local.xml 78 | 79 | # Installshield output folder 80 | [Ee]xpress/ 81 | 82 | # DocProject is a documentation generator add-in 83 | DocProject/buildhelp/ 84 | DocProject/Help/*.HxT 85 | DocProject/Help/*.HxC 86 | DocProject/Help/*.hhc 87 | DocProject/Help/*.hhk 88 | DocProject/Help/*.hhp 89 | DocProject/Help/Html2 90 | DocProject/Help/html 91 | 92 | # Click-Once directory 93 | publish/ 94 | 95 | # Publish Web Output 96 | *.Publish.xml 97 | 98 | # NuGet Packages Directory 99 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 100 | #packages/ 101 | 102 | # Windows Azure Build Output 103 | csx 104 | *.build.csdef 105 | 106 | # Windows Store app package directory 107 | AppPackages/ 108 | 109 | # Others 110 | sql/ 111 | *.Cache 112 | ClientBin/ 113 | [Ss]tyle[Cc]op.* 114 | ~$* 115 | *~ 116 | *.dbmdl 117 | *.[Pp]ublish.xml 118 | *.pfx 119 | *.publishsettings 120 | 121 | # RIA/Silverlight projects 122 | Generated_Code/ 123 | 124 | # Backup & report files from converting an old project file to a newer 125 | # Visual Studio version. Backup files are not needed, because we have git ;-) 126 | _UpgradeReport_Files/ 127 | Backup*/ 128 | UpgradeLog*.XML 129 | UpgradeLog*.htm 130 | 131 | # SQL Server files 132 | App_Data/*.mdf 133 | App_Data/*.ldf 134 | 135 | 136 | #LightSwitch generated files 137 | GeneratedArtifacts/ 138 | _Pvt_Extensions/ 139 | ModelManifest.xml 140 | 141 | # ========================= 142 | # Windows detritus 143 | # ========================= 144 | 145 | # Windows image file caches 146 | Thumbs.db 147 | ehthumbs.db 148 | 149 | # Folder config file 150 | Desktop.ini 151 | 152 | # Recycle Bin used on file shares 153 | $RECYCLE.BIN/ 154 | 155 | # Mac desktop service store files 156 | .DS_Store 157 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | TinyCompiler 2 | ============ 3 | ####TinyCompiler是一款能编译一个经过裁剪的C语言的子的简易编译器,采用了C++11编写 4 | 5 | ####编译环境:VS2013或以上 6 | 7 | ####词法说明:在C98的基础上 8 | 9 | 1.不支持声明语句,只支持定义语句 10 | 2.不支持科学计数法 11 | 3.不支持数字加前后缀和八进制、十六进制表示法 12 | 4.字符串中不支持转义 13 | 5.无三元表达式 14 | 15 | 16 | #####词法测试代码(选择了lua源码中的lmem.c文件并经过了删除不符合TinyCompiler词法的部分): 17 |
18 | void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems,
19 | int limit, const char *errormsg) {
20 | void *newblock;
21 | int newsize;
22 | if (*size >= limit/2) {
23 | if (*size >= limit)
24 | luaG_runerror(L, errormsg);
25 | newsize = limit;
26 | }
27 | else {
28 | newsize = (*size)*2;
29 | if (newsize < MINSIZEARRAY)
30 | newsize = MINSIZEARRAY;
31 | }
32 | newblock = luaM_reallocv(L, block, *size, newsize, size_elems);
33 | *size = newsize;
34 | return newblock;
35 | }
36 | void *luaM_toobig (lua_State *L) {
37 | luaG_runerror(L, "memory allocation error: block too big");
38 | return NULL;
39 | }
40 | void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) {
41 | global_State *g = G(L);
42 | lua_assert((osize == 0) == (block == NULL));
43 | block = (*g->frealloc)(g->ud, block, osize, nsize);
44 | if (block == NULL && nsize > 0)
45 | luaD_throw(L, LUA_ERRMEM);
46 | lua_assert((nsize == 0) == (block == NULL));
47 | g->totalbytes = (g->totalbytes - osize) + nsize;
48 | return block;
49 | }
50 |
51 | #####分词结果:
52 |
53 | Token: {name = void attr = KEYWORD loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
54 | Token: {name = * attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
55 | Token: {name = luaM_growaux_ attr = VARIABLE loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
56 | Token: {name = ( attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
57 | Token: {name = lua_State attr = VARIABLE loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
58 | Token: {name = * attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
59 | Token: {name = L attr = VARIABLE loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
60 | Token: {name = , attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
61 | Token: {name = void attr = KEYWORD loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
62 | Token: {name = * attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
63 | Token: {name = block attr = VARIABLE loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
64 | Token: {name = , attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
65 | Token: {name = int attr = KEYWORD loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
66 | Token: {name = * attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
67 | Token: {name = size attr = VARIABLE loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
68 | Token: {name = , attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
69 | Token: {name = size_t attr = VARIABLE loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
70 | Token: {name = size_elems attr = VARIABLE loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
71 | Token: {name = , attr = DELIMITER loc = 1 file = C:\Users\zxh\Desktop\lmem.c }
72 | Token: {name = int attr = KEYWORD loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
73 | Token: {name = limit attr = VARIABLE loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
74 | Token: {name = , attr = DELIMITER loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
75 | Token: {name = const attr = KEYWORD loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
76 | Token: {name = char attr = KEYWORD loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
77 | Token: {name = * attr = DELIMITER loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
78 | Token: {name = errormsg attr = VARIABLE loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
79 | Token: {name = ) attr = DELIMITER loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
80 | Token: {name = { attr = DELIMITER loc = 2 file = C:\Users\zxh\Desktop\lmem.c }
81 | Token: {name = void attr = KEYWORD loc = 3 file = C:\Users\zxh\Desktop\lmem.c }
82 | Token: {name = * attr = DELIMITER loc = 3 file = C:\Users\zxh\Desktop\lmem.c }
83 | Token: {name = newblock attr = VARIABLE loc = 3 file = C:\Users\zxh\Desktop\lmem.c }
84 | Token: {name = ; attr = DELIMITER loc = 3 file = C:\Users\zxh\Desktop\lmem.c }
85 | Token: {name = int attr = KEYWORD loc = 4 file = C:\Users\zxh\Desktop\lmem.c }
86 | Token: {name = newsize attr = VARIABLE loc = 4 file = C:\Users\zxh\Desktop\lmem.c }
87 | Token: {name = ; attr = DELIMITER loc = 4 file = C:\Users\zxh\Desktop\lmem.c }
88 | Token: {name = if attr = KEYWORD loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
89 | Token: {name = ( attr = DELIMITER loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
90 | Token: {name = * attr = DELIMITER loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
91 | Token: {name = size attr = VARIABLE loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
92 | Token: {name = >= attr = DELIMITER loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
93 | Token: {name = limit attr = VARIABLE loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
94 | Token: {name = / attr = DELIMITER loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
95 | Token: {name = 2 attr = INTEGER loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
96 | Token: {name = ) attr = DELIMITER loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
97 | Token: {name = { attr = DELIMITER loc = 5 file = C:\Users\zxh\Desktop\lmem.c }
98 | Token: {name = if attr = KEYWORD loc = 6 file = C:\Users\zxh\Desktop\lmem.c }
99 | Token: {name = ( attr = DELIMITER loc = 6 file = C:\Users\zxh\Desktop\lmem.c }
100 | Token: {name = * attr = DELIMITER loc = 6 file = C:\Users\zxh\Desktop\lmem.c }
101 | Token: {name = size attr = VARIABLE loc = 6 file = C:\Users\zxh\Desktop\lmem.c }
102 | Token: {name = >= attr = DELIMITER loc = 6 file = C:\Users\zxh\Desktop\lmem.c }
103 | Token: {name = limit attr = VARIABLE loc = 6 file = C:\Users\zxh\Desktop\lmem.c }
104 | Token: {name = ) attr = DELIMITER loc = 6 file = C:\Users\zxh\Desktop\lmem.c }
105 | Token: {name = luaG_runerror attr = VARIABLE loc = 7 file = C:\Users\zxh\Desktop\lmem.c }
106 | Token: {name = ( attr = DELIMITER loc = 7 file = C:\Users\zxh\Desktop\lmem.c }
107 | Token: {name = L attr = VARIABLE loc = 7 file = C:\Users\zxh\Desktop\lmem.c }
108 | Token: {name = , attr = DELIMITER loc = 7 file = C:\Users\zxh\Desktop\lmem.c }
109 | Token: {name = errormsg attr = VARIABLE loc = 7 file = C:\Users\zxh\Desktop\lmem.c }
110 | Token: {name = ) attr = DELIMITER loc = 7 file = C:\Users\zxh\Desktop\lmem.c }
111 | Token: {name = ; attr = DELIMITER loc = 7 file = C:\Users\zxh\Desktop\lmem.c }
112 | Token: {name = newsize attr = VARIABLE loc = 8 file = C:\Users\zxh\Desktop\lmem.c }
113 | Token: {name = = attr = DELIMITER loc = 8 file = C:\Users\zxh\Desktop\lmem.c }
114 | Token: {name = limit attr = VARIABLE loc = 8 file = C:\Users\zxh\Desktop\lmem.c }
115 | Token: {name = ; attr = DELIMITER loc = 8 file = C:\Users\zxh\Desktop\lmem.c }
116 | Token: {name = } attr = DELIMITER loc = 9 file = C:\Users\zxh\Desktop\lmem.c }
117 | Token: {name = else attr = KEYWORD loc = 10 file = C:\Users\zxh\Desktop\lmem.c }
118 | Token: {name = { attr = DELIMITER loc = 10 file = C:\Users\zxh\Desktop\lmem.c }
119 | Token: {name = newsize attr = VARIABLE loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
120 | Token: {name = = attr = DELIMITER loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
121 | Token: {name = ( attr = DELIMITER loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
122 | Token: {name = * attr = DELIMITER loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
123 | Token: {name = size attr = VARIABLE loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
124 | Token: {name = ) attr = DELIMITER loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
125 | Token: {name = * attr = DELIMITER loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
126 | Token: {name = 2 attr = INTEGER loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
127 | Token: {name = ; attr = DELIMITER loc = 11 file = C:\Users\zxh\Desktop\lmem.c }
128 | Token: {name = if attr = KEYWORD loc = 12 file = C:\Users\zxh\Desktop\lmem.c }
129 | Token: {name = ( attr = DELIMITER loc = 12 file = C:\Users\zxh\Desktop\lmem.c }
130 | Token: {name = newsize attr = VARIABLE loc = 12 file = C:\Users\zxh\Desktop\lmem.c }
131 | Token: {name = < attr = DELIMITER loc = 12 file = C:\Users\zxh\Desktop\lmem.c }
132 | Token: {name = MINSIZEARRAY attr = VARIABLE loc = 12 file = C:\Users\zxh\Desktop\lmem.c }
133 | Token: {name = ) attr = DELIMITER loc = 12 file = C:\Users\zxh\Desktop\lmem.c }
134 | Token: {name = newsize attr = VARIABLE loc = 13 file = C:\Users\zxh\Desktop\lmem.c }
135 | Token: {name = = attr = DELIMITER loc = 13 file = C:\Users\zxh\Desktop\lmem.c }
136 | Token: {name = MINSIZEARRAY attr = VARIABLE loc = 13 file = C:\Users\zxh\Desktop\lmem.c }
137 | Token: {name = ; attr = DELIMITER loc = 13 file = C:\Users\zxh\Desktop\lmem.c }
138 | Token: {name = } attr = DELIMITER loc = 14 file = C:\Users\zxh\Desktop\lmem.c }
139 | Token: {name = newblock attr = VARIABLE loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
140 | Token: {name = = attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
141 | Token: {name = luaM_reallocv attr = VARIABLE loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
142 | Token: {name = ( attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
143 | Token: {name = L attr = VARIABLE loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
144 | Token: {name = , attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
145 | Token: {name = block attr = VARIABLE loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
146 | Token: {name = , attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
147 | Token: {name = * attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
148 | Token: {name = size attr = VARIABLE loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
149 | Token: {name = , attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
150 | Token: {name = newsize attr = VARIABLE loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
151 | Token: {name = , attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
152 | Token: {name = size_elems attr = VARIABLE loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
153 | Token: {name = ) attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
154 | Token: {name = ; attr = DELIMITER loc = 15 file = C:\Users\zxh\Desktop\lmem.c }
155 | Token: {name = * attr = DELIMITER loc = 16 file = C:\Users\zxh\Desktop\lmem.c }
156 | Token: {name = size attr = VARIABLE loc = 16 file = C:\Users\zxh\Desktop\lmem.c }
157 | Token: {name = = attr = DELIMITER loc = 16 file = C:\Users\zxh\Desktop\lmem.c }
158 | Token: {name = newsize attr = VARIABLE loc = 16 file = C:\Users\zxh\Desktop\lmem.c }
159 | Token: {name = ; attr = DELIMITER loc = 16 file = C:\Users\zxh\Desktop\lmem.c }
160 | Token: {name = return attr = KEYWORD loc = 17 file = C:\Users\zxh\Desktop\lmem.c }
161 | Token: {name = newblock attr = VARIABLE loc = 17 file = C:\Users\zxh\Desktop\lmem.c }
162 | Token: {name = ; attr = DELIMITER loc = 17 file = C:\Users\zxh\Desktop\lmem.c }
163 | Token: {name = } attr = DELIMITER loc = 18 file = C:\Users\zxh\Desktop\lmem.c }
164 | Token: {name = void attr = KEYWORD loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
165 | Token: {name = * attr = DELIMITER loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
166 | Token: {name = luaM_toobig attr = VARIABLE loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
167 | Token: {name = ( attr = DELIMITER loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
168 | Token: {name = lua_State attr = VARIABLE loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
169 | Token: {name = * attr = DELIMITER loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
170 | Token: {name = L attr = VARIABLE loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
171 | Token: {name = ) attr = DELIMITER loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
172 | Token: {name = { attr = DELIMITER loc = 19 file = C:\Users\zxh\Desktop\lmem.c }
173 | Token: {name = luaG_runerror attr = VARIABLE loc = 20 file = C:\Users\zxh\Desktop\lmem.c }
174 | Token: {name = ( attr = DELIMITER loc = 20 file = C:\Users\zxh\Desktop\lmem.c }
175 | Token: {name = L attr = VARIABLE loc = 20 file = C:\Users\zxh\Desktop\lmem.c }
176 | Token: {name = , attr = DELIMITER loc = 20 file = C:\Users\zxh\Desktop\lmem.c }
177 | Token: {name = "memory allocation error: block too big" attr = STRING loc = 20 file = C:\Users\zxh\Desktop\lmem.c }
178 | Token: {name = ) attr = DELIMITER loc = 20 file = C:\Users\zxh\Desktop\lmem.c }
179 | Token: {name = ; attr = DELIMITER loc = 20 file = C:\Users\zxh\Desktop\lmem.c }
180 | Token: {name = return attr = KEYWORD loc = 21 file = C:\Users\zxh\Desktop\lmem.c }
181 | Token: {name = NULL attr = VARIABLE loc = 21 file = C:\Users\zxh\Desktop\lmem.c }
182 | Token: {name = ; attr = DELIMITER loc = 21 file = C:\Users\zxh\Desktop\lmem.c }
183 | Token: {name = } attr = DELIMITER loc = 22 file = C:\Users\zxh\Desktop\lmem.c }
184 | Token: {name = void attr = KEYWORD loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
185 | Token: {name = * attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
186 | Token: {name = luaM_realloc_ attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
187 | Token: {name = ( attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
188 | Token: {name = lua_State attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
189 | Token: {name = * attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
190 | Token: {name = L attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
191 | Token: {name = , attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
192 | Token: {name = void attr = KEYWORD loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
193 | Token: {name = * attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
194 | Token: {name = block attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
195 | Token: {name = , attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
196 | Token: {name = size_t attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
197 | Token: {name = osize attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
198 | Token: {name = , attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
199 | Token: {name = size_t attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
200 | Token: {name = nsize attr = VARIABLE loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
201 | Token: {name = ) attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
202 | Token: {name = { attr = DELIMITER loc = 23 file = C:\Users\zxh\Desktop\lmem.c }
203 | Token: {name = global_State attr = VARIABLE loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
204 | Token: {name = * attr = DELIMITER loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
205 | Token: {name = g attr = VARIABLE loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
206 | Token: {name = = attr = DELIMITER loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
207 | Token: {name = G attr = VARIABLE loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
208 | Token: {name = ( attr = DELIMITER loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
209 | Token: {name = L attr = VARIABLE loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
210 | Token: {name = ) attr = DELIMITER loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
211 | Token: {name = ; attr = DELIMITER loc = 24 file = C:\Users\zxh\Desktop\lmem.c }
212 | Token: {name = lua_assert attr = VARIABLE loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
213 | Token: {name = ( attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
214 | Token: {name = ( attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
215 | Token: {name = osize attr = VARIABLE loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
216 | Token: {name = == attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
217 | Token: {name = 0 attr = INTEGER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
218 | Token: {name = ) attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
219 | Token: {name = == attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
220 | Token: {name = ( attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
221 | Token: {name = block attr = VARIABLE loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
222 | Token: {name = == attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
223 | Token: {name = NULL attr = VARIABLE loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
224 | Token: {name = ) attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
225 | Token: {name = ) attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
226 | Token: {name = ; attr = DELIMITER loc = 25 file = C:\Users\zxh\Desktop\lmem.c }
227 | Token: {name = block attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
228 | Token: {name = = attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
229 | Token: {name = ( attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
230 | Token: {name = * attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
231 | Token: {name = g attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
232 | Token: {name = -> attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
233 | Token: {name = frealloc attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
234 | Token: {name = ) attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
235 | Token: {name = ( attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
236 | Token: {name = g attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
237 | Token: {name = -> attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
238 | Token: {name = ud attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
239 | Token: {name = , attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
240 | Token: {name = block attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
241 | Token: {name = , attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
242 | Token: {name = osize attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
243 | Token: {name = , attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
244 | Token: {name = nsize attr = VARIABLE loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
245 | Token: {name = ) attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
246 | Token: {name = ; attr = DELIMITER loc = 26 file = C:\Users\zxh\Desktop\lmem.c }
247 | Token: {name = if attr = KEYWORD loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
248 | Token: {name = ( attr = DELIMITER loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
249 | Token: {name = block attr = VARIABLE loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
250 | Token: {name = == attr = DELIMITER loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
251 | Token: {name = NULL attr = VARIABLE loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
252 | Token: {name = && attr = DELIMITER loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
253 | Token: {name = nsize attr = VARIABLE loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
254 | Token: {name = > attr = DELIMITER loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
255 | Token: {name = 0 attr = INTEGER loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
256 | Token: {name = ) attr = DELIMITER loc = 27 file = C:\Users\zxh\Desktop\lmem.c }
257 | Token: {name = luaD_throw attr = VARIABLE loc = 28 file = C:\Users\zxh\Desktop\lmem.c }
258 | Token: {name = ( attr = DELIMITER loc = 28 file = C:\Users\zxh\Desktop\lmem.c }
259 | Token: {name = L attr = VARIABLE loc = 28 file = C:\Users\zxh\Desktop\lmem.c }
260 | Token: {name = , attr = DELIMITER loc = 28 file = C:\Users\zxh\Desktop\lmem.c }
261 | Token: {name = LUA_ERRMEM attr = VARIABLE loc = 28 file = C:\Users\zxh\Desktop\lmem.c }
262 | Token: {name = ) attr = DELIMITER loc = 28 file = C:\Users\zxh\Desktop\lmem.c }
263 | Token: {name = ; attr = DELIMITER loc = 28 file = C:\Users\zxh\Desktop\lmem.c }
264 | Token: {name = lua_assert attr = VARIABLE loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
265 | Token: {name = ( attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
266 | Token: {name = ( attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
267 | Token: {name = nsize attr = VARIABLE loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
268 | Token: {name = == attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
269 | Token: {name = 0 attr = INTEGER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
270 | Token: {name = ) attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
271 | Token: {name = == attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
272 | Token: {name = ( attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
273 | Token: {name = block attr = VARIABLE loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
274 | Token: {name = == attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
275 | Token: {name = NULL attr = VARIABLE loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
276 | Token: {name = ) attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
277 | Token: {name = ) attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
278 | Token: {name = ; attr = DELIMITER loc = 29 file = C:\Users\zxh\Desktop\lmem.c }
279 | Token: {name = g attr = VARIABLE loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
280 | Token: {name = -> attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
281 | Token: {name = totalbytes attr = VARIABLE loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
282 | Token: {name = = attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
283 | Token: {name = ( attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
284 | Token: {name = g attr = VARIABLE loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
285 | Token: {name = -> attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
286 | Token: {name = totalbytes attr = VARIABLE loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
287 | Token: {name = - attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
288 | Token: {name = osize attr = VARIABLE loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
289 | Token: {name = ) attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
290 | Token: {name = + attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
291 | Token: {name = nsize attr = VARIABLE loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
292 | Token: {name = ; attr = DELIMITER loc = 30 file = C:\Users\zxh\Desktop\lmem.c }
293 | Token: {name = return attr = KEYWORD loc = 31 file = C:\Users\zxh\Desktop\lmem.c }
294 | Token: {name = block attr = VARIABLE loc = 31 file = C:\Users\zxh\Desktop\lmem.c }
295 | Token: {name = ; attr = DELIMITER loc = 31 file = C:\Users\zxh\Desktop\lmem.c }
296 | Token: {name = } attr = DELIMITER loc = 32 file = C:\Users\zxh\Desktop\lmem.c }
297 |
298 |
--------------------------------------------------------------------------------
/TinyCompiler.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Express 2013 for Windows Desktop
4 | VisualStudioVersion = 12.0.21005.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TinyCompiler", "TinyCompiler\TinyCompiler.vcxproj", "{2CD79679-AE64-4D54-82F6-46B2B7D7D338}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Win32 = Debug|Win32
11 | Release|Win32 = Release|Win32
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {2CD79679-AE64-4D54-82F6-46B2B7D7D338}.Debug|Win32.ActiveCfg = Debug|Win32
15 | {2CD79679-AE64-4D54-82F6-46B2B7D7D338}.Debug|Win32.Build.0 = Debug|Win32
16 | {2CD79679-AE64-4D54-82F6-46B2B7D7D338}.Release|Win32.ActiveCfg = Release|Win32
17 | {2CD79679-AE64-4D54-82F6-46B2B7D7D338}.Release|Win32.Build.0 = Release|Win32
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/TinyCompiler/KeyWord/KeyWord.cpp:
--------------------------------------------------------------------------------
1 | #include "KeyWord.h"
2 |
3 | namespace TinyCompiler{
4 | std::shared_ptr