spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← All files
name: src/Parser/Rules.ts
-rw-r--r--
3356
 1import {
 2  RuleIndex
 3} from "./RuleIndex";
 4
 5// Rules represent the Regular Expressions that will be used in sequence to match a given input to the Parser.
 6const WHITE_SPACE_RULE = /^(?:\s+)/;
 7const DOUBLE_QUOTES_RULE = /^(?:"(\\["]|[^"])*")/;
 8const SINGLE_QUOTES_RULE = /^(?:'(\\[']|[^'])*')/;
 9const FORMULA_NAME_RULE = /^(?:[A-Za-z.]{1,}[A-Za-z_0-9]+(?=[(]))/;
10const $_A1_CELL_RULE = /^(?:\$[A-Za-z]+\$[0-9]+)/;
11const A1_CELL_RULE = /^(?:[A-Za-z]+[0-9]+)/;
12const FORMULA_NAME_SIMPLE_RULE = /^(?:[A-Za-z.]+(?=[(]))/;
13const VARIABLE_RULE = /^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)/;
14const SIMPLE_VARIABLE_RILE = /^(?:[A-Za-z_]+)/;
15const INTEGER_RULE = /^(?:[0-9]+(?:(?:[eE])(?:[\+-])?[0-9]+)?)/;
16const OPEN_AND_CLOSE_OF_ARRAY_RULE = /^(?:\[([^\]]*)?\])/;
17const DOLLAR_SIGN_RULE = /^(?:\$)/;
18const AMPERSAND_SIGN_RULE = /^(?:&)/;
19const SINGLE_WHITESPACE_RULE = /^(?: )/;
20const PERIOD_RULE = /^(?:[.])/;
21const COLON_RULE = /^(?::)/;
22const SEMI_COLON_RULE = /^(?:;)/;
23const COMMA_RULE = /^(?:,)/;
24const ASTERISK_RULE = /^(?:\*)/;
25const FORWARD_SLASH_RULE = /^(?:\/)/;
26const MINUS_SIGN_RULE = /^(?:-)/;
27const PLUS_SIGN_RULE = /^(?:\+)/;
28const CARET_SIGN_RULE = /^(?:\^)/;
29const OPEN_PAREN_RULE = /^(?:\()/;
30const CLOSE_PAREN_RULE = /^(?:\))/;
31const GREATER_THAN_SIGN_RULE = /^(?:>)/;
32const LESS_THAN_SIGN_RULE = /^(?:<)/;
33const OPEN_DOUBLE_QUOTE = /^(?:")/;
34const OPEN_SINGLE_QUITE = /^(?:')/;
35const EXCLAMATION_POINT_RULE = /^(?:!)/;
36const EQUALS_SIGN_RULE = /^(?:=)/;
37const PERCENT_SIGN_RULE = /^(?:%)/;
38const FULL_ERROR_RULE = /^(?:#N\/A|#NUM\!|#NULL\!|#DIV\/0\!|#VALUE\!|#REF\!|#ERROR)/;
39const END_OF_STRING_RULE = /^(?:$)/;
40
41
42// Sequential rules to use when parsing a given input.
43let RULES = [];
44RULES[RuleIndex.WhiteSpace] = WHITE_SPACE_RULE;
45RULES[RuleIndex.DoubleQuotes] = DOUBLE_QUOTES_RULE;
46RULES[RuleIndex.SingleQuotes] = SINGLE_QUOTES_RULE;
47RULES[RuleIndex.FormulaName] = FORMULA_NAME_RULE;
48RULES[RuleIndex.$A1Cell] = $_A1_CELL_RULE;
49RULES[RuleIndex.A1Cell] = A1_CELL_RULE;
50RULES[RuleIndex.FormulaNameSimple] = FORMULA_NAME_SIMPLE_RULE;
51RULES[RuleIndex.Variable] = VARIABLE_RULE;
52RULES[RuleIndex.SimpleVariable] = SIMPLE_VARIABLE_RILE;
53RULES[RuleIndex.Integer] = INTEGER_RULE;
54RULES[RuleIndex.SelfContainedArray] = OPEN_AND_CLOSE_OF_ARRAY_RULE;
55RULES[RuleIndex.DollarSign] = DOLLAR_SIGN_RULE;
56RULES[RuleIndex.Ampersand] = AMPERSAND_SIGN_RULE;
57RULES[RuleIndex.SingleWhitespace] = SINGLE_WHITESPACE_RULE;
58RULES[RuleIndex.Period] = PERIOD_RULE;
59RULES[RuleIndex.Colon] = COLON_RULE;
60RULES[RuleIndex.Semicolon] = SEMI_COLON_RULE;
61RULES[RuleIndex.Comma] = COMMA_RULE;
62RULES[RuleIndex.Asterisk] = ASTERISK_RULE;
63RULES[RuleIndex.ForwardSlash] = FORWARD_SLASH_RULE;
64RULES[RuleIndex.Minus] = MINUS_SIGN_RULE;
65RULES[RuleIndex.Plus] = PLUS_SIGN_RULE;
66RULES[RuleIndex.Caret] = CARET_SIGN_RULE;
67RULES[RuleIndex.OpenParen] = OPEN_PAREN_RULE;
68RULES[RuleIndex.CloseParen] = CLOSE_PAREN_RULE;
69RULES[RuleIndex.GreaterThan] = GREATER_THAN_SIGN_RULE;
70RULES[RuleIndex.LessThanSign] = LESS_THAN_SIGN_RULE;
71RULES[RuleIndex.OpenDoubleQuote] = OPEN_DOUBLE_QUOTE;
72RULES[RuleIndex.OpenSingleQuote] = OPEN_SINGLE_QUITE;
73RULES[RuleIndex.ExclamationPoint] = EXCLAMATION_POINT_RULE;
74RULES[RuleIndex.Equals] = EQUALS_SIGN_RULE;
75RULES[RuleIndex.Percent] = PERCENT_SIGN_RULE;
76RULES[RuleIndex.FullError] = FULL_ERROR_RULE;
77RULES[RuleIndex.EndOfString] = END_OF_STRING_RULE;
78
79export {
80  RULES
81}