510 lines
8.8 KiB
TypeScript
510 lines
8.8 KiB
TypeScript
import { createToken, Lexer } from "chevrotain";
|
|
import * as R from "./constants";
|
|
|
|
export const Word = createToken({
|
|
name: "Word",
|
|
pattern: /[^\s\n\.\?\!]+/,
|
|
});
|
|
|
|
export const WhitespaceOrNewline = createToken({
|
|
name: "WhitespaceOrNewline",
|
|
pattern: /[\s\n]+/,
|
|
group: Lexer.SKIPPED,
|
|
});
|
|
|
|
export const Whitespace = createToken({
|
|
name: "Whitespace",
|
|
pattern: /\s+/,
|
|
categories: [WhitespaceOrNewline],
|
|
group: Lexer.SKIPPED,
|
|
});
|
|
|
|
export const RomanNumeral = createToken({
|
|
name: "RomanNumeral",
|
|
pattern: /[IVXLCDM]+\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Enter = createToken({
|
|
name: "Enter",
|
|
pattern: /enter\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Exit = createToken({
|
|
name: "Exit",
|
|
pattern: /exit\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Exeunt = createToken({
|
|
name: "Exeunt",
|
|
pattern: /exeunt\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const And = createToken({
|
|
name: "And",
|
|
pattern: /and\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Article = createToken({
|
|
name: "Article",
|
|
pattern: /(a|an|the)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Be = createToken({
|
|
name: "Be",
|
|
pattern: /(am|are|art|be|is)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Not = createToken({
|
|
name: "Not",
|
|
pattern: /not\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const More = createToken({
|
|
name: "More",
|
|
pattern: /more\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Less = createToken({
|
|
name: "Less",
|
|
pattern: /less\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Than = createToken({
|
|
name: "Than",
|
|
pattern: /than\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Let = createToken({
|
|
name: "Let",
|
|
pattern: /let\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Us = createToken({
|
|
name: "Us",
|
|
pattern: /us\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const We = createToken({
|
|
name: "We",
|
|
pattern: /we\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Shall = createToken({
|
|
name: "Shall",
|
|
pattern: /shall\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Must = createToken({
|
|
name: "Must",
|
|
pattern: /must\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Return = createToken({
|
|
name: "Return",
|
|
pattern: /return\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Proceed = createToken({
|
|
name: "Proceed",
|
|
pattern: /proceed\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Character = createToken({
|
|
name: "Character",
|
|
pattern: R.CharacterRegex,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const FirstPersonPossessive = createToken({
|
|
name: "FirstPersonPossessive",
|
|
pattern: /(mine|my)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const FirstPersonReflexive = createToken({
|
|
name: "FirstPersonReflexive",
|
|
pattern: /myself\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const FirstPerson = createToken({
|
|
name: "FirstPerson",
|
|
pattern: /(i|me)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const NegativeAdjective = createToken({
|
|
name: "NegativeAdjective",
|
|
pattern: R.NegativeAdjectiveRegex,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const NegativeComparative = createToken({
|
|
name: "NegativeComparative",
|
|
pattern: /(punier|smaller|worse)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const NegativeNoun = createToken({
|
|
name: "NegativeNoun",
|
|
pattern: R.NegativeNounRegex,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const NeutralAdjective = createToken({
|
|
name: "NeutralAdjective",
|
|
pattern: R.NeutralAdjectiveRegex,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const NeutralNoun = createToken({
|
|
name: "NeutralNoun",
|
|
pattern: R.NeutralNounRegex,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Nothing = createToken({
|
|
name: "Nothing",
|
|
pattern: /(nothing|zero)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const PositiveAdjective = createToken({
|
|
name: "PositiveAdjective",
|
|
pattern: R.PositiveAdjectiveRegex,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const PositiveComparative = createToken({
|
|
name: "PositiveComparative",
|
|
pattern: /(better|bigger|fresher|friendlier|nicer|jollier)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const PositiveNoun = createToken({
|
|
name: "PositiveNoun",
|
|
pattern: R.PositiveNounRegex,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const SecondPersonPossessive = createToken({
|
|
name: "SecondPersonPossessive",
|
|
pattern: /(thine|thy|your)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const SecondPersonReflexive = createToken({
|
|
name: "SecondPersonReflexive",
|
|
pattern: /(thyself|yourself)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const SecondPerson = createToken({
|
|
name: "SecondPerson",
|
|
pattern: /(thee|thou|you)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const ThirdPersonPossessive = createToken({
|
|
name: "ThirdPersonPossessive",
|
|
pattern: /(his|her|its|their)\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Act = createToken({
|
|
name: "Act",
|
|
pattern: /act\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Scene = createToken({
|
|
name: "Scene",
|
|
pattern: /scene\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const As = createToken({
|
|
name: "As",
|
|
pattern: /as\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Open = createToken({
|
|
name: "Open",
|
|
pattern: /open\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Heart = createToken({
|
|
name: "Heart",
|
|
pattern: /heart\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Speak = createToken({
|
|
name: "Speak",
|
|
pattern: /speak\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Mind = createToken({
|
|
name: "Mind",
|
|
pattern: /mind\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const The = createToken({
|
|
name: "The",
|
|
pattern: /the\b/i,
|
|
categories: [Word, Article],
|
|
});
|
|
|
|
export const Between = createToken({
|
|
name: "Between",
|
|
pattern: /between\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Of = createToken({
|
|
name: "Of",
|
|
pattern: /of\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const If = createToken({
|
|
name: "If",
|
|
pattern: /if\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const So = createToken({
|
|
name: "So",
|
|
pattern: /so\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const To = createToken({
|
|
name: "To",
|
|
pattern: /to\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Listen = createToken({
|
|
name: "Listen",
|
|
pattern: /listen\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Recall = createToken({
|
|
name: "Recall",
|
|
pattern: /recall\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Remember = createToken({
|
|
name: "Remember",
|
|
pattern: /remember\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
////////////////////////////////
|
|
/////////// OPERATORS //////////
|
|
////////////////////////////////
|
|
|
|
export const Sum = createToken({
|
|
name: "Sum",
|
|
pattern: /sum\b/,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Difference = createToken({
|
|
name: "Difference",
|
|
pattern: /difference\b/,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Product = createToken({
|
|
name: "Product",
|
|
pattern: /product\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Quotient = createToken({
|
|
name: "Quotient",
|
|
pattern: /quotient\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Remainder = createToken({
|
|
name: "Remainder",
|
|
pattern: /remainder\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Factorial = createToken({
|
|
name: "Factorial",
|
|
pattern: /factorial\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Square = createToken({
|
|
name: "Square",
|
|
pattern: /square\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Root = createToken({
|
|
name: "Root",
|
|
pattern: /root\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Cube = createToken({
|
|
name: "Cube",
|
|
pattern: /cube\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Twice = createToken({
|
|
name: "Twice",
|
|
pattern: /twice\b/i,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const SentenceMark = createToken({
|
|
name: "SentenceMark",
|
|
pattern: /\.|\?|\!/,
|
|
});
|
|
|
|
export const SquareBracketOpen = createToken({
|
|
name: "SquareBracketOpen",
|
|
pattern: /\[/,
|
|
});
|
|
|
|
export const SquareBracketClose = createToken({
|
|
name: "SquareBracketClose",
|
|
pattern: /\]/,
|
|
});
|
|
|
|
export const Colon = createToken({
|
|
name: "Colon",
|
|
pattern: /:/,
|
|
});
|
|
|
|
export const Comma = createToken({
|
|
name: "Comma",
|
|
pattern: /,/,
|
|
categories: [Word],
|
|
});
|
|
|
|
export const Period = createToken({
|
|
name: "Period",
|
|
pattern: /\./,
|
|
categories: [SentenceMark],
|
|
});
|
|
|
|
export const QuestionMark = createToken({
|
|
name: "QuestionMark",
|
|
pattern: /\?/,
|
|
categories: [SentenceMark],
|
|
});
|
|
|
|
export const I = createToken({
|
|
name: "I",
|
|
pattern: /i\b/i,
|
|
categories: [RomanNumeral, FirstPerson, Word],
|
|
});
|
|
|
|
export const AllTokens = [
|
|
Whitespace,
|
|
WhitespaceOrNewline,
|
|
Character,
|
|
The,
|
|
Be,
|
|
More,
|
|
Less,
|
|
Than,
|
|
Let,
|
|
Us,
|
|
We,
|
|
Shall,
|
|
Must,
|
|
Return,
|
|
Proceed,
|
|
Not,
|
|
As,
|
|
I,
|
|
If,
|
|
So,
|
|
To,
|
|
Enter,
|
|
Exit,
|
|
Exeunt,
|
|
Open,
|
|
Heart,
|
|
Speak,
|
|
Mind,
|
|
Listen,
|
|
Recall,
|
|
Remember,
|
|
And,
|
|
Nothing,
|
|
Between,
|
|
Of,
|
|
Sum,
|
|
Difference,
|
|
Product,
|
|
Quotient,
|
|
Remainder,
|
|
Factorial,
|
|
Square,
|
|
Root,
|
|
Cube,
|
|
Twice,
|
|
Period,
|
|
QuestionMark,
|
|
Article,
|
|
Act,
|
|
Scene,
|
|
Comma,
|
|
Colon,
|
|
SquareBracketOpen,
|
|
SquareBracketClose,
|
|
SentenceMark,
|
|
FirstPersonPossessive,
|
|
FirstPersonReflexive,
|
|
FirstPerson,
|
|
NegativeAdjective,
|
|
NegativeComparative,
|
|
NegativeNoun,
|
|
NeutralAdjective,
|
|
NeutralNoun,
|
|
PositiveAdjective,
|
|
PositiveComparative,
|
|
PositiveNoun,
|
|
SecondPersonPossessive,
|
|
SecondPersonReflexive,
|
|
SecondPerson,
|
|
ThirdPersonPossessive,
|
|
RomanNumeral,
|
|
Word,
|
|
];
|