add ::<
This commit is contained in:
parent
8c172ccbe4
commit
da1dbb92cd
@ -1,7 +1,6 @@
|
|||||||
import { Reporter } from "./info.ts";
|
import { Reporter } from "./info.ts";
|
||||||
import { Pos, Token } from "./token.ts";
|
import { Pos, Token } from "./token.ts";
|
||||||
|
|
||||||
|
|
||||||
export class Lexer {
|
export class Lexer {
|
||||||
private index = 0;
|
private index = 0;
|
||||||
private line = 1;
|
private line = 1;
|
||||||
@ -77,12 +76,11 @@ export class Lexer {
|
|||||||
if (this.done()) {
|
if (this.done()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
value +=
|
value += {
|
||||||
{
|
n: "\n",
|
||||||
n: "\n",
|
t: "\t",
|
||||||
t: "\t",
|
"0": "\0",
|
||||||
"0": "\0",
|
}[this.current()] ?? this.current();
|
||||||
}[this.current()] ?? this.current();
|
|
||||||
} else {
|
} else {
|
||||||
value += this.current();
|
value += this.current();
|
||||||
}
|
}
|
||||||
@ -132,6 +130,16 @@ export class Lexer {
|
|||||||
this.step();
|
this.step();
|
||||||
return this.token("->", pos);
|
return this.token("->", pos);
|
||||||
}
|
}
|
||||||
|
if (first === ":") {
|
||||||
|
if (!this.done() && this.test(":")) {
|
||||||
|
this.step();
|
||||||
|
if (!this.done() && this.test("<")) {
|
||||||
|
this.step();
|
||||||
|
return this.token("::<", pos);
|
||||||
|
}
|
||||||
|
return this.token("::", pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
return this.token(first, pos);
|
return this.token(first, pos);
|
||||||
}
|
}
|
||||||
if (this.test("/")) {
|
if (this.test("/")) {
|
||||||
|
@ -26,6 +26,8 @@ syn match Operator '>='
|
|||||||
syn match Operator '\.'
|
syn match Operator '\.'
|
||||||
syn match Operator ':'
|
syn match Operator ':'
|
||||||
syn match Operator '->'
|
syn match Operator '->'
|
||||||
|
syn match Operator '::'
|
||||||
|
syn match Operator '::<'
|
||||||
|
|
||||||
syn match Number '0'
|
syn match Number '0'
|
||||||
syn match Number '[1-9][0-9]*'
|
syn match Number '[1-9][0-9]*'
|
||||||
|
@ -1,84 +1,84 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
|
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
|
||||||
"name": "Slige",
|
"name": "Slige",
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{ "include": "#keywords" },
|
{ "include": "#keywords" },
|
||||||
{ "include": "#strings" },
|
{ "include": "#strings" },
|
||||||
{ "include": "#numbers" },
|
{ "include": "#numbers" },
|
||||||
{ "include": "#operators" },
|
{ "include": "#operators" },
|
||||||
{ "include": "#punctuation" },
|
{ "include": "#punctuation" },
|
||||||
{ "include": "#functions" },
|
{ "include": "#functions" },
|
||||||
{ "include": "#idents" }
|
{ "include": "#idents" }
|
||||||
],
|
],
|
||||||
"repository": {
|
"repository": {
|
||||||
"keywords": {
|
"keywords": {
|
||||||
"patterns": [
|
|
||||||
{
|
|
||||||
"name": "keyword.control.slige",
|
|
||||||
"match": "\\b(break|return|let|fn|loop|if|else|struct|import|or|and|not)\\b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "constant.language.slige",
|
|
||||||
"match": "\\b(null|false|true)\\b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "storage.type.slige",
|
|
||||||
"match": "\\b(int|string|bool)\\b"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"strings": {
|
|
||||||
"name": "string.quoted.double.slige",
|
|
||||||
"begin": "\"",
|
|
||||||
"end": "\"",
|
|
||||||
"patterns": [
|
|
||||||
{
|
|
||||||
"name": "constant.character.escape.slige",
|
|
||||||
"match": "\\\\."
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"numbers": {
|
|
||||||
"patterns": [
|
|
||||||
{
|
|
||||||
"name": "constant.numeric.slige",
|
|
||||||
"match": "\\b0\\b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "constant.numeric.slige",
|
|
||||||
"match": "\\b[1-9][0-9]*(\\.[0-9]+)?\\b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "constant.numeric.slige",
|
|
||||||
"match": "\\b0x[0-9a-fA-F]+?\\b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "constant.numeric.slige",
|
|
||||||
"match": "\\b0b[01]+?\\b"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"operators": {
|
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"match": "\\+|\\-|\\*|\\/|=|(==)|(!=)|<|>|(<=)|(>=)|\\.|:|(\\->)",
|
"name": "keyword.control.slige",
|
||||||
|
"match": "\\b(break|return|let|fn|loop|if|else|struct|import|or|and|not)\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "constant.language.slige",
|
||||||
|
"match": "\\b(null|false|true)\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "storage.type.slige",
|
||||||
|
"match": "\\b(int|string|bool)\\b"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"strings": {
|
||||||
|
"name": "string.quoted.double.slige",
|
||||||
|
"begin": "\"",
|
||||||
|
"end": "\"",
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"name": "constant.character.escape.slige",
|
||||||
|
"match": "\\\\."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"numbers": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"name": "constant.numeric.slige",
|
||||||
|
"match": "\\b0\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "constant.numeric.slige",
|
||||||
|
"match": "\\b[1-9][0-9]*(\\.[0-9]+)?\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "constant.numeric.slige",
|
||||||
|
"match": "\\b0x[0-9a-fA-F]+?\\b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "constant.numeric.slige",
|
||||||
|
"match": "\\b0b[01]+?\\b"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"operators": {
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "\\+|\\-|\\*|\\/|=|(==)|(!=)|<|>|(<=)|(>=)|\\.|:|(\\->)|(::)|(::<)",
|
||||||
"name": "keyword.operator.slige"
|
"name": "keyword.operator.slige"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"punctuation": {
|
"punctuation": {
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"match": ";",
|
"match": ";",
|
||||||
"name": "punctuation.terminator.statement.slige"
|
"name": "punctuation.terminator.statement.slige"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"match": ",",
|
"match": ",",
|
||||||
"name": "punctuation.separator.delimiter.slige"
|
"name": "punctuation.separator.delimiter.slige"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"functions": {
|
"functions": {
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"match": "(?>\\b[a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=(?>\\:\\:<.*?>)?\\()",
|
"match": "(?>\\b[a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=(?>\\:\\:<.*?>)?\\()",
|
||||||
@ -86,14 +86,18 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"idents": {
|
"idents": {
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{
|
{
|
||||||
"match": "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b",
|
"match": "\\b[a-z_][a-zA-Z0-9_]*\\b",
|
||||||
"name": "variable.other.slige"
|
"name": "variable.other.slige"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "\\b[A-Z][a-zA-Z0-9_]*\\b",
|
||||||
|
"name": "entity.name.type.slige"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scopeName": "source.slige"
|
"scopeName": "source.slige"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user