Skip to content

Commit 1cc4dc8

Browse files
committed
Расширенные идентификаторы
1 parent 8a3719d commit 1cc4dc8

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

program.own

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,7 @@ xarr = [0, 5, 2]
231231
xarr[0] += xarr[1]
232232
xarr[0] *= xarr[2]
233233
xarr[0]++
234-
println xarr[0]
234+
println xarr[0]
235+
236+
`extended word variable` = 9
237+
println `extended word variable`

src/com/annimon/ownlang/parser/Lexer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public List<Token> tokenize() {
116116
final char current = peek(0);
117117
if (Character.isDigit(current)) tokenizeNumber();
118118
else if (Character.isJavaIdentifierStart(current)) tokenizeWord();
119+
else if (current == '`') tokenizeExtendedWord();
119120
else if (current == '"') tokenizeText();
120121
else if (current == '#') {
121122
next();
@@ -206,6 +207,21 @@ private void tokenizeWord() {
206207
}
207208
}
208209

210+
private void tokenizeExtendedWord() {
211+
next();// skip `
212+
clearBuffer();
213+
char current = peek(0);
214+
while (true) {
215+
if (current == '\0') throw error("Reached end of file while parsing extended word.");
216+
if (current == '\n' || current == '\r') throw error("Reached end of line while parsing extended word.");
217+
if (current == '`') break;
218+
buffer.append(current);
219+
current = next();
220+
}
221+
next(); // skip closing `
222+
addToken(TokenType.WORD, buffer.toString());
223+
}
224+
209225
private void tokenizeText() {
210226
next();// skip "
211227
clearBuffer();
@@ -216,6 +232,7 @@ private void tokenizeText() {
216232
current = next();
217233
switch (current) {
218234
case '"': current = next(); buffer.append('"'); continue;
235+
case '0': current = next(); buffer.append('\0'); continue;
219236
case 'b': current = next(); buffer.append('\b'); continue;
220237
case 'f': current = next(); buffer.append('\f'); continue;
221238
case 'n': current = next(); buffer.append('\n'); continue;

0 commit comments

Comments
 (0)