src/Lexer.cc

Wed, 12 Feb 2014 06:50:13 +0200

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Wed, 12 Feb 2014 06:50:13 +0200
changeset 110
7a7a53f1d51b
parent 108
6409ece8297c
child 112
def56932f938
permissions
-rw-r--r--

- extended refactor to EToken (now TokenType)

88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 Copyright 2012-2014 Santeri Piippo
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
3 All rights reserved.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 Redistribution and use in source and binary forms, with or without
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 modification, are permitted provided that the following conditions
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 are met:
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 1. Redistributions of source code must retain the above copyright
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 notice, this list of conditions and the following disclaimer.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 2. Redistributions in binary form must reproduce the above copyright
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 notice, this list of conditions and the following disclaimer in the
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 documentation and/or other materials provided with the distribution.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 3. The name of the author may not be used to endorse or promote products
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 derived from this software without specific prior written permission.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
25 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
26 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
27 */
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
28
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
29 #include <cstring>
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
30 #include "Lexer.h"
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 static StringList gFileNameStack;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
33 static Lexer* gMainLexer = null;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
34
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
35 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 Lexer::Lexer()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
38 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
39 assert (gMainLexer == null);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
40 gMainLexer = this;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
41 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
42
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
43 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
44 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
45 Lexer::~Lexer()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
46 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
47 gMainLexer = null;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
48 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
49
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
50 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
51 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
52 void Lexer::ProcessFile (String fileName)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
53 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
54 gFileNameStack << fileName;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
55 FILE* fp = fopen (fileName, "r");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
56
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
57 if (fp == null)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
58 Error ("couldn't open %1 for reading: %2", fileName, strerror (errno));
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
59
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
60 LexerScanner sc (fp);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
61 CheckFileHeader (sc);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
62
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
63 while (sc.GetNextToken())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
64 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65 // Preprocessor commands:
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
66 if (sc.GetTokenType() ==TK_Hash)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
67 {
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
68 MustGetFromScanner (sc,TK_Symbol);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
69
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
70 if (sc.GetTokenText() == "include")
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
71 {
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
72 MustGetFromScanner (sc,TK_String);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
73 String fileName = sc.GetTokenText();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
74
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
75 if (gFileNameStack.Contains (fileName))
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
76 Error ("attempted to #include %1 recursively", sc.GetTokenText());
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
78 ProcessFile (fileName);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
79 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80 else
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
81 Error ("unknown preprocessor directive \"#%1\"", sc.GetTokenText());
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
83 else
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
84 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
85 Token tok;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86 tok.file = fileName;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 tok.line = sc.GetLine();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
88 tok.column = sc.GetColumn();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 tok.type = sc.GetTokenType();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90 tok.text = sc.GetTokenText();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
91
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
92 // devf ("Token #%1: %2:%3:%4: %5 (%6)\n", mTokens.Size(),
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
93 // tok.file, tok.line, tok.column, DescribeToken (&tok),
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
94 // GetTokenTypeString (tok.type));
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
95
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
96 mTokens << tok;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
98 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100 mTokenPosition = mTokens.begin() - 1;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101 gFileNameStack.Remove (fileName);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
102 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 // ============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 static bool IsValidHeader (String header)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
108 if (header.EndsWith ("\n"))
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
109 header.RemoveFromEnd (1);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
111 StringList tokens = header.Split (" ");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
112
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
113 if (tokens.Size() != 2 || tokens[0] != "#!botc" || tokens[1].IsEmpty())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114 return false;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
116 StringList nums = tokens[1].Split (".");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
117
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118 if (nums.Size() == 2)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119 nums << "0";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120 elif (nums.Size() != 3)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
121 return false;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
122
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
123 bool okA, okB, okC;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
124 long major = nums[0].ToLong (&okA);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
125 long minor = nums[1].ToLong (&okB);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
126 long patch = nums[2].ToLong (&okC);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
127
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
128 if (!okA || !okB || !okC)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
129 return false;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
130
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
131 if (VERSION_NUMBER < MAKE_VERSION_NUMBER (major, minor, patch))
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
132 Error ("The script file requires " APPNAME " v%1, this is v%2",
108
6409ece8297c - refactored enums, macros split from Main.h to Macros.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 105
diff changeset
133 MakeVersionString (major, minor, patch), GetVersionString (false));
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
134
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
135 return true;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
136 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
137
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
138 // ============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
139 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
140 void Lexer::CheckFileHeader (LexerScanner& sc)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
141 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
142 if (!IsValidHeader (sc.ReadLine()))
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
143 Error ("Not a valid botscript file! File must start with '#!botc <version>'");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
144 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
145
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
146 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
147 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
148 bool Lexer::GetNext (TokenType req)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
149 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
150 Iterator pos = mTokenPosition;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
151
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
152 if (mTokens.IsEmpty())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
153 return false;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
154
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
155 mTokenPosition++;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
156
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
157 if (IsAtEnd() || (req !=TK_Any && GetTokenType() != req))
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
158 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
159 mTokenPosition = pos;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
160 return false;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
161 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
162
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
163 return true;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
164 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
166 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
167 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
168 void Lexer::MustGetNext (TokenType tok)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
169 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
170 if (!GetNext())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
171 Error ("unexpected EOF");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
172
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
173 if (tok !=TK_Any)
103
48472c0678cc - removed tkAny as the default value of Lexer::MustGetNext to prevent problems like the one last commit fixed
Teemu Piippo <crimsondusk64@gmail.com>
parents: 99
diff changeset
174 TokenMustBe (tok);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
175 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
176
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
177 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
178 // eugh..
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
179 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
180 void Lexer::MustGetFromScanner (LexerScanner& sc, TokenType tt)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
182 if (!sc.GetNextToken())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
183 Error ("unexpected EOF");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
184
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
185 if (tt !=TK_Any && sc.GetTokenType() != tt)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
186 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
187 // TODO
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
188 Token tok;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
189 tok.type = sc.GetTokenType();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
190 tok.text = sc.GetTokenText();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
191
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
192 Error ("at %1:%2: expected %3, got %4",
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
193 gFileNameStack.Last(),
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
194 sc.GetLine(),
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
195 DescribeTokenType (tt),
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
196 DescribeToken (&tok));
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
197 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
198 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
199
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
200 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
201 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
202 void Lexer::MustGetAnyOf (const List<TokenType>& toks)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
203 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
204 if (!GetNext())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
205 Error ("unexpected EOF");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
206
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
207 for (TokenType tok : toks)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
208 if (GetTokenType() == tok)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
209 return;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
210
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
211 String toknames;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
212
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
213 for (const TokenType& tokType : toks)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
214 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
215 if (&tokType == &toks.Last())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
216 toknames += " or ";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
217 elif (toknames.IsEmpty() == false)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
218 toknames += ", ";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
219
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
220 toknames += DescribeTokenType (tokType);
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
221 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
222
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
223 Error ("expected %1, got %2", toknames, DescribeToken (GetToken()));
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
224 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
225
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
226 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
227 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
228 int Lexer::GetOneSymbol (const StringList& syms)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
229 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
230 if (!GetNext())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
231 Error ("unexpected EOF");
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
232
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
233 if (GetTokenType() ==TK_Symbol)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
234 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
235 for (int i = 0; i < syms.Size(); ++i)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
236 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
237 if (syms[i] == GetToken()->text)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
238 return i;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
239 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
240 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
241
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
242 Error ("expected one of %1, got %2", syms, DescribeToken (GetToken()));
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
243 return -1;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
244 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
245
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
246 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
247 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
248 void Lexer::TokenMustBe (TokenType tok)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
249 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
250 if (GetTokenType() != tok)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
251 Error ("expected %1, got %2", DescribeTokenType (tok),
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
252 DescribeToken (GetToken()));
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
253 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
254
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
255 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
256 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
257 String Lexer::DescribeTokenPrivate (TokenType tokType, Lexer::Token* tok)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
258 {
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
259 if (tokType <gLastNamedToken)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
260 return "\"" + LexerScanner::GetTokenString (tokType) + "\"";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
261
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
262 switch (tokType)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
263 {
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
264 case TK_Symbol: return tok ? tok->text : "a symbol";
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
265 case TK_Number: return tok ? tok->text : "a number";
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
266 case TK_String: return tok ? ("\"" + tok->text + "\"") : "a string";
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
267 case TK_Any: return tok ? tok->text : "any token";
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
268 default: break;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
269 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
270
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
271 return "";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
272 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
273
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
274 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
275 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
276 bool Lexer::PeekNext (Lexer::Token* tk)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
277 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
278 Iterator pos = mTokenPosition;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
279 bool r = GetNext();
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
280
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
281 if (r && tk != null)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
282 *tk = *mTokenPosition;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
283
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
284 mTokenPosition = pos;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
285 return r;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
286 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
287
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
288 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
289 //
110
7a7a53f1d51b - extended refactor to EToken (now TokenType)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 108
diff changeset
290 bool Lexer::PeekNextType (TokenType req)
99
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
291 {
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
292 Iterator pos = mTokenPosition;
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
293 bool result = false;
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
294
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
295 if (GetNext() && GetTokenType() == req)
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
296 result = true;
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
297
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
298 mTokenPosition = pos;
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
299 return result;
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
300 }
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
301
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
302 // =============================================================================
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
303 //
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
304 Lexer* Lexer::GetCurrentLexer()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
305 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
306 return gMainLexer;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
307 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
308
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
309 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
310 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
311 String Lexer::PeekNextString (int a)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
312 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
313 if (mTokenPosition + a >= mTokens.end())
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
314 return "";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
315
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
316 Iterator oldpos = mTokenPosition;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
317 mTokenPosition += a;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
318 String result = GetToken()->text;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
319 mTokenPosition = oldpos;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
320 return result;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
321 }
89
029a330a9bef - blargh. buffers weren't initialized properly
Teemu Piippo <crimsondusk64@gmail.com>
parents: 88
diff changeset
322
029a330a9bef - blargh. buffers weren't initialized properly
Teemu Piippo <crimsondusk64@gmail.com>
parents: 88
diff changeset
323 // =============================================================================
029a330a9bef - blargh. buffers weren't initialized properly
Teemu Piippo <crimsondusk64@gmail.com>
parents: 88
diff changeset
324 //
105
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
325 String Lexer::DescribeCurrentPosition()
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
326 {
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
327 return GetToken()->file + ":" + GetToken()->line;
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
328 }
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
329
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
330 // =============================================================================
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
331 //
6dbac3305614 - highly reworked variable support, variable declarations now are declared with 'var', uses are prefixed with '$', merged constant handling into variables
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
332 String Lexer::DescribeTokenPosition()
89
029a330a9bef - blargh. buffers weren't initialized properly
Teemu Piippo <crimsondusk64@gmail.com>
parents: 88
diff changeset
333 {
029a330a9bef - blargh. buffers weren't initialized properly
Teemu Piippo <crimsondusk64@gmail.com>
parents: 88
diff changeset
334 return Format ("%1 / %2", mTokenPosition - mTokens.begin(), mTokens.Size());
108
6409ece8297c - refactored enums, macros split from Main.h to Macros.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 105
diff changeset
335 }

mercurial