src/Lexer.cc

Mon, 03 Mar 2014 17:02:38 +0200

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Mon, 03 Mar 2014 17:02:38 +0200
changeset 117
cc1e14d55047
parent 116
56ff19947607
permissions
-rw-r--r--

- reserved 'constexpr' as a keyword because I know I will need it someday

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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
52 void Lexer::processFile (String fileName)
88
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)
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
58 error ("couldn't open %1 for reading: %2", fileName, strerror (errno));
88
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);
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
61 checkFileHeader (sc);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
62
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
63 while (sc.getNextToken())
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
64 {
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65 // Preprocessor commands:
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
66 if (sc.getTokenType() ==TK_Hash)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
67 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
68 mustGetFromScanner (sc,TK_Symbol);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
69
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
70 if (sc.getTokenText() == "include")
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
71 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
72 mustGetFromScanner (sc,TK_String);
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
73 String fileName = sc.getTokenText();
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
74
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
75 if (gFileNameStack.contains (fileName))
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
76 error ("attempted to #include %1 recursively", sc.getTokenText());
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
78 processFile (fileName);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
79 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80 else
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
81 error ("unknown preprocessor directive \"#%1\"", sc.getTokenText());
88
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 {
112
def56932f938 - changed the PROPERTY macro to a simper version and brought some refactoring with it
Teemu Piippo <crimsondusk64@gmail.com>
parents: 110
diff changeset
85 TokenInfo tok;
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86 tok.file = fileName;
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
87 tok.line = sc.getLine();
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
88 tok.column = sc.getColumn();
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
89 tok.type = sc.getTokenType();
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
90 tok.text = sc.getTokenText();
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
91
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
92 // devf ("Token #%1: %2:%3:%4: %5 (%6)\n", mTokens.size(),
110
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
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
96 m_tokens << tok;
88
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
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
100 m_tokenPosition = m_tokens.begin() - 1;
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
101 gFileNameStack.removeOne (fileName);
88
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 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
108 if (header.endsWith ("\n"))
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
109 header.removeFromEnd (1);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
111 StringList tokens = header.split (" ");
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
112
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
113 if (tokens.size() != 2 || tokens[0] != "#!botc" || tokens[1].isEmpty())
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114 return false;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
116 StringList nums = tokens[1].split (".");
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
117
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
118 if (nums.size() == 2)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119 nums << "0";
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
120 elif (nums.size() != 3)
88
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;
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
124 long major = nums[0].toLong (&okA);
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
125 long minor = nums[1].toLong (&okB);
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
126 long patch = nums[2].toLong (&okC);
88
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))
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
132 error ("The script file requires " APPNAME " v%1, this is v%2",
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
133 makeVersionString (major, minor, patch), versionString (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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
140 void Lexer::checkFileHeader (LexerScanner& sc)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
141 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
142 if (!IsValidHeader (sc.readLine()))
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
143 error ("Not a valid botscript file! File must start with '#!botc <version>'");
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
148 bool Lexer::next (ETokenType req)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
149 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
150 Iterator pos = m_tokenPosition;
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
151
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
152 if (m_tokens.isEmpty())
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
153 return false;
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
154
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
155 m_tokenPosition++;
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
156
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
157 if (isAtEnd() || (req !=TK_Any && tokenType() != req))
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
158 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
159 m_tokenPosition = pos;
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
168 void Lexer::mustGetNext (ETokenType tok)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
169 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
170 if (!next())
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
171 error ("unexpected EOF");
88
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)
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
180 void Lexer::mustGetFromScanner (LexerScanner& sc, ETokenType tt)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
182 if (sc.getNextToken() == false)
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
183 error ("unexpected EOF");
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
184
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
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
112
def56932f938 - changed the PROPERTY macro to a simper version and brought some refactoring with it
Teemu Piippo <crimsondusk64@gmail.com>
parents: 110
diff changeset
188 TokenInfo tok;
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
189 tok.type = sc.getTokenType();
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
190 tok.text = sc.getTokenText();
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
191
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
192 error ("at %1:%2: expected %3, got %4",
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
193 gFileNameStack.last(),
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
194 sc.getLine(),
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
195 describeTokenType (tt),
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
196 describeToken (&tok));
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
202 void Lexer::mustGetAnyOf (const List<ETokenType>& toks)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
203 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
204 if (!next())
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
205 error ("unexpected EOF");
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
206
112
def56932f938 - changed the PROPERTY macro to a simper version and brought some refactoring with it
Teemu Piippo <crimsondusk64@gmail.com>
parents: 110
diff changeset
207 for (ETokenType tok : toks)
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
208 if (tokenType() == tok)
88
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
112
def56932f938 - changed the PROPERTY macro to a simper version and brought some refactoring with it
Teemu Piippo <crimsondusk64@gmail.com>
parents: 110
diff changeset
213 for (const ETokenType& tokType : toks)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
214 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
215 if (&tokType == &toks.last())
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
216 toknames += " or ";
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
217 elif (toknames.isEmpty() == false)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
218 toknames += ", ";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
219
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
220 toknames += describeTokenType (tokType);
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
221 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
222
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
223 error ("expected %1, got %2", toknames, describeToken (token()));
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
228 int Lexer::getOneSymbol (const StringList& syms)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
229 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
230 if (!next())
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
231 error ("unexpected EOF");
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
232
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
233 if (tokenType() ==TK_Symbol)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
234 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
235 for (int i = 0; i < syms.size(); ++i)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
236 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
237 if (syms[i] == token()->text)
88
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
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
242 error ("expected one of %1, got %2", syms, describeToken (token()));
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
248 void Lexer::tokenMustBe (ETokenType tok)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
249 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
250 if (tokenType() != tok)
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
251 error ("expected %1, got %2", describeTokenType (tok),
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
252 describeToken (token()));
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
257 String Lexer::describeTokenPrivate (ETokenType tokType, Lexer::TokenInfo* 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)
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
260 return "\"" + LexerScanner::getTokenString (tokType) + "\"";
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
276 bool Lexer::peekNext (Lexer::TokenInfo* tk)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
277 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
278 Iterator pos = m_tokenPosition;
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
279 bool r = next();
88
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)
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
282 *tk = *m_tokenPosition;
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
283
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
284 m_tokenPosition = pos;
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
290 bool Lexer::peekNextType (ETokenType req)
99
44c0c7f31ae8 - changed the syntax of funcdef to something sane
Teemu Piippo <crimsondusk64@gmail.com>
parents: 89
diff changeset
291 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
292 Iterator pos = m_tokenPosition;
99
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
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
295 if (next() && tokenType() == req)
99
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
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
298 m_tokenPosition = pos;
99
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
304 Lexer* Lexer::getCurrentLexer()
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
311 String Lexer::peekNextString (int a)
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
312 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
313 if (m_tokenPosition + a >= m_tokens.end())
88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
314 return "";
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
315
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
316 Iterator oldpos = m_tokenPosition;
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
317 m_tokenPosition += a;
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
318 String result = token()->text;
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
319 m_tokenPosition = oldpos;
88
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
325 String Lexer::describeCurrentPosition()
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
326 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
327 return token()->file + ":" + token()->line;
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
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 //
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
332 String Lexer::describeTokenPosition()
89
029a330a9bef - blargh. buffers weren't initialized properly
Teemu Piippo <crimsondusk64@gmail.com>
parents: 88
diff changeset
333 {
115
9be16e1c1e44 - reformatting... again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 112
diff changeset
334 return format ("%1 / %2", m_tokenPosition - m_tokens.begin(), m_tokens.size());
108
6409ece8297c - refactored enums, macros split from Main.h to Macros.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 105
diff changeset
335 }
116
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
336
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
337 // =============================================================================
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
338 //
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
339 void Lexer::mustGetSymbol (const String& a)
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
340 {
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
341 mustGetNext (TK_Any);
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
342 if (token()->text != a)
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
343 error ("expected \"%1\", got \"%2\"", a, token()->text);
56ff19947607 - added using statement for specifying the target zandronum version. will be used later
Teemu Piippo <crimsondusk64@gmail.com>
parents: 115
diff changeset
344 }

mercurial