clarity-pattern-parser 4.0.3 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +466 -1
  2. package/TODO.md +76 -2
  3. package/dist/ast/Node.d.ts +49 -11
  4. package/dist/ast/Visitor.d.ts +31 -31
  5. package/dist/index.browser.js +1513 -1495
  6. package/dist/index.browser.js.map +1 -1
  7. package/dist/index.d.ts +17 -17
  8. package/dist/index.esm.js +1480 -1459
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +1481 -1463
  11. package/dist/index.js.map +1 -1
  12. package/dist/intellisense/AutoComplete.d.ts +28 -0
  13. package/dist/intellisense/Suggestion.d.ts +11 -0
  14. package/dist/intellisense/SuggestionOption.d.ts +4 -0
  15. package/dist/patterns/And.d.ts +37 -24
  16. package/dist/patterns/Cursor.d.ts +37 -0
  17. package/dist/patterns/CursorHistory.d.ts +30 -0
  18. package/dist/patterns/Literal.d.ts +35 -19
  19. package/dist/patterns/Not.d.ts +29 -11
  20. package/dist/patterns/Or.d.ts +33 -22
  21. package/dist/patterns/ParseError.d.ts +6 -8
  22. package/dist/patterns/ParseResult.d.ts +6 -0
  23. package/dist/patterns/Pattern.d.ts +20 -26
  24. package/dist/patterns/Reference.d.ts +34 -12
  25. package/dist/patterns/Regex.d.ts +41 -21
  26. package/dist/patterns/Repeat.d.ts +38 -20
  27. package/dist/patterns/clonePatterns.d.ts +2 -0
  28. package/dist/patterns/filterOutNull.d.ts +2 -0
  29. package/dist/patterns/findPattern.d.ts +2 -0
  30. package/dist/patterns/getNextPattern.d.ts +2 -0
  31. package/jest.config.js +2 -1
  32. package/package.json +4 -5
  33. package/rollup.config.js +1 -1
  34. package/src/ast/Node.test.ts +364 -0
  35. package/src/ast/Node.ts +237 -23
  36. package/src/index.ts +25 -27
  37. package/src/intellisense/AutoComplete.test.ts +150 -0
  38. package/src/intellisense/AutoComplete.ts +200 -0
  39. package/src/intellisense/Suggestion.ts +12 -0
  40. package/src/intellisense/SuggestionOption.ts +4 -0
  41. package/src/{tests/cssPatterns → intellisense/css}/cssValue.ts +1 -1
  42. package/src/{tests/cssPatterns → intellisense/css}/divider.ts +2 -1
  43. package/src/intellisense/css/hex.ts +6 -0
  44. package/src/{tests/cssPatterns → intellisense/css}/method.ts +8 -9
  45. package/src/intellisense/css/name.ts +5 -0
  46. package/src/{tests/javascriptPatterns → intellisense/css}/number.ts +3 -3
  47. package/src/intellisense/css/spaces.ts +6 -0
  48. package/src/intellisense/css/unit.ts +10 -0
  49. package/src/{tests/cssPatterns → intellisense/css}/value.ts +1 -1
  50. package/src/{tests/cssPatterns → intellisense/css}/values.ts +1 -1
  51. package/src/intellisense/javascript/Javascript.test.ts +203 -0
  52. package/src/intellisense/javascript/arrayLiteral.ts +25 -0
  53. package/src/intellisense/javascript/deleteStatement.ts +14 -0
  54. package/src/intellisense/javascript/escapedCharacter.ts +49 -0
  55. package/src/intellisense/javascript/exponent.ts +24 -0
  56. package/src/intellisense/javascript/expression.ts +87 -0
  57. package/src/intellisense/javascript/expressionStatement.ts +29 -0
  58. package/src/intellisense/javascript/fraction.ts +11 -0
  59. package/src/intellisense/javascript/infixOperator.ts +36 -0
  60. package/src/intellisense/javascript/integer.ts +7 -0
  61. package/src/intellisense/javascript/invocation.ts +28 -0
  62. package/src/intellisense/javascript/literal.ts +14 -0
  63. package/src/intellisense/javascript/name.ts +3 -0
  64. package/src/intellisense/javascript/numberLiteral.ts +10 -0
  65. package/src/intellisense/javascript/objectLiteral.ts +30 -0
  66. package/src/intellisense/javascript/optionalSpaces.ts +3 -0
  67. package/src/intellisense/javascript/parameters.ts +20 -0
  68. package/src/intellisense/javascript/prefixOperator.ts +13 -0
  69. package/src/intellisense/javascript/propertyAccess.ts +23 -0
  70. package/src/intellisense/javascript/stringLiteral.ts +28 -0
  71. package/src/patterns/And.test.ts +310 -0
  72. package/src/patterns/And.ts +244 -119
  73. package/src/patterns/Cursor.test.ts +93 -0
  74. package/src/patterns/Cursor.ts +133 -0
  75. package/src/patterns/CursorHistory.test.ts +54 -0
  76. package/src/patterns/CursorHistory.ts +95 -0
  77. package/src/patterns/Literal.test.ts +166 -0
  78. package/src/patterns/Literal.ts +141 -62
  79. package/src/patterns/Not.test.ts +168 -0
  80. package/src/patterns/Not.ts +113 -32
  81. package/src/patterns/Or.test.ts +209 -0
  82. package/src/patterns/Or.ts +128 -97
  83. package/src/patterns/ParseError.ts +3 -7
  84. package/src/patterns/ParseResult.ts +7 -0
  85. package/src/patterns/Pattern.ts +21 -150
  86. package/src/patterns/Reference.test.ts +193 -0
  87. package/src/patterns/Reference.ts +114 -88
  88. package/src/patterns/Regex.test.ts +133 -0
  89. package/src/patterns/Regex.ts +117 -60
  90. package/src/patterns/Repeat.test.ts +218 -0
  91. package/src/patterns/Repeat.ts +220 -103
  92. package/src/patterns/clonePatterns.ts +5 -0
  93. package/src/patterns/filterOutNull.ts +13 -0
  94. package/src/patterns/findPattern.ts +25 -0
  95. package/src/Cursor.ts +0 -141
  96. package/src/CursorHistory.ts +0 -146
  97. package/src/TextSuggester.ts +0 -317
  98. package/src/ast/Visitor.ts +0 -271
  99. package/src/patterns/LookAhead.ts +0 -32
  100. package/src/patterns/Recursive.ts +0 -92
  101. package/src/tests/And.test.ts +0 -180
  102. package/src/tests/ComplexExamples.test.ts +0 -86
  103. package/src/tests/CssPatterns.test.ts +0 -90
  104. package/src/tests/CursorHistory.test.ts +0 -107
  105. package/src/tests/Cusor.test.ts +0 -174
  106. package/src/tests/HtmlPatterns.test.ts +0 -34
  107. package/src/tests/Literal.test.ts +0 -79
  108. package/src/tests/LookAhead.test.ts +0 -44
  109. package/src/tests/Not.test.ts +0 -51
  110. package/src/tests/Or.test.ts +0 -113
  111. package/src/tests/Pattern.test.ts +0 -290
  112. package/src/tests/Recursive.test.ts +0 -64
  113. package/src/tests/Reference.test.ts +0 -16
  114. package/src/tests/Repeat.test.ts +0 -75
  115. package/src/tests/SpeedTest.test.ts +0 -31
  116. package/src/tests/TextSuggester.test.ts +0 -297
  117. package/src/tests/Visitor.test.ts +0 -331
  118. package/src/tests/cssPatterns/hex.ts +0 -5
  119. package/src/tests/cssPatterns/name.ts +0 -5
  120. package/src/tests/cssPatterns/number.ts +0 -8
  121. package/src/tests/cssPatterns/spaces.ts +0 -5
  122. package/src/tests/cssPatterns/unit.ts +0 -8
  123. package/src/tests/htmlPatterns/element.ts +0 -49
  124. package/src/tests/javascriptPatterns/boolean.ts +0 -10
  125. package/src/tests/javascriptPatterns/json.ts +0 -67
  126. package/src/tests/javascriptPatterns/name.ts +0 -5
  127. package/src/tests/javascriptPatterns/objectLiteral.ts +0 -40
  128. package/src/tests/javascriptPatterns/string.ts +0 -84
  129. package/src/tests/javascriptPatterns/unit.ts +0 -8
  130. package/src/tests/javascriptPatterns/whitespace.ts +0 -44
  131. package/src/tests/naturalLanguage/filter.ts +0 -37
  132. package/src/tests/patterns/sentence.ts +0 -37
  133. /package/src/{tests/cssPatterns → intellisense/css}/optionalSpaces.ts +0 -0
@@ -0,0 +1,25 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Reference } from "../../patterns/Reference";
5
+ import { Regex } from "../../patterns/Regex";
6
+ import { Repeat } from "../../patterns/Repeat";
7
+ import { optionalSpaces } from "./optionalSpaces";
8
+
9
+ const divider = new Regex("array-divider", "\\s*,\\s*");
10
+ const arrayItems = new Repeat("array-items", new Reference("expression"), divider, true);
11
+
12
+ export const arrayLiteral = new Or("array-literal",
13
+ [new And("empty-array-literal", [
14
+ new Literal("open-square-bracket", "["),
15
+ optionalSpaces,
16
+ new Literal("close-square-bracket", "]"),
17
+ ]),
18
+ new And("array-literal", [
19
+ new Literal("open-square-bracket", "["),
20
+ optionalSpaces,
21
+ arrayItems,
22
+ optionalSpaces,
23
+ new Literal("close-square-bracket", "]"),
24
+ ])
25
+ ]);
@@ -0,0 +1,14 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Regex } from "../../patterns/Regex";
4
+ import { expression } from "./expression";
5
+ import { propertyAccess } from "./propertyAccess";
6
+
7
+ const space = new Regex("space", "\\s+");
8
+ export const deleteStatement = new And("delete-statement", [
9
+ new Literal("delete-keyword", "delete"),
10
+ space,
11
+ expression,
12
+ propertyAccess
13
+ ]);
14
+
@@ -0,0 +1,49 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Regex } from "../../patterns/Regex";
5
+
6
+ const backslash = new Literal("backslash", "\\");
7
+ const doubleQuote = new Literal("double-quote", "\"");
8
+ const singleQuote = new Literal("single-quote", "'");
9
+ const slash = new Literal("slash", "/");
10
+ const backspace = new Literal("backspace", "b");
11
+ const formFeed = new Literal("form-feed", "f");
12
+ const newLine = new Literal("new-line", "n");
13
+ const carriageReturn = new Literal("carriage-return", "r");
14
+ const tab = new Literal("tab", "t");
15
+ const hexDigit = new Regex("hex-digit", "[0-9a-fA-F]");
16
+
17
+ hexDigit.setTokens([
18
+ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
19
+ "a", "b", "c", "d", "e", "f",
20
+ "A", "B", "C", "D", "E", "F",
21
+ ]);
22
+
23
+ const unicode = new And("hex", [
24
+ new Literal("u", "u"),
25
+ hexDigit,
26
+ hexDigit,
27
+ hexDigit,
28
+ hexDigit
29
+ ]);
30
+
31
+ const specialCharacter = new Or("special-character", [
32
+ doubleQuote,
33
+ singleQuote,
34
+ backslash,
35
+ slash,
36
+ backspace,
37
+ formFeed,
38
+ newLine,
39
+ carriageReturn,
40
+ tab,
41
+ unicode,
42
+ ]);
43
+
44
+ const escapedCharacter = new And("escaped-character", [backslash, specialCharacter])
45
+
46
+ export {
47
+ escapedCharacter
48
+ }
49
+
@@ -0,0 +1,24 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Regex } from "../../patterns/Regex";
5
+
6
+ const e = new Or("e", [
7
+ new Literal("e", "e"),
8
+ new Literal("e", "E")
9
+ ]);
10
+
11
+ const optionalSign = new Or("sign", [
12
+ new Literal("plus", "+"),
13
+ new Literal("minus", "-")
14
+ ], true);
15
+
16
+ const digit = new Regex("digit", "\\d+");
17
+
18
+ const exponent = new And("exponent", [
19
+ e,
20
+ optionalSign,
21
+ digit,
22
+ ]);
23
+
24
+ export { exponent }
@@ -0,0 +1,87 @@
1
+ import { Regex } from "../..";
2
+ import { And } from "../../patterns/And";
3
+ import { Literal } from "../../patterns/Literal";
4
+ import { Or } from "../../patterns/Or";
5
+ import { Reference } from "../../patterns/Reference";
6
+ import { Repeat } from "../../patterns/Repeat";
7
+ import { infixOperator } from "./infixOperator";
8
+ import { invocation } from "./invocation";
9
+ import { literal } from "./literal";
10
+ import { name } from "./name";
11
+ import { optionalSpaces } from "./optionalSpaces";
12
+ import { prefixOperator } from "./prefixOperator";
13
+ import { propertyAccess } from "./propertyAccess";
14
+
15
+ const space = new Regex("space", "\\s+")
16
+ const newKeyword = new Literal("new-keyword", "new");
17
+ const deleteKeyword = new Literal("delete-keyword", "delete");
18
+
19
+ const newExpression = new And("new-expression", [
20
+ newKeyword,
21
+ space,
22
+ new Reference("expression")
23
+ ]);
24
+
25
+ const deleteExpression = new And("delete-expression", [
26
+ deleteKeyword,
27
+ space,
28
+ new Reference("expression")
29
+ ]);
30
+
31
+ const groupExpression = new And("group-expression", [
32
+ new Literal("open-paren", "("),
33
+ optionalSpaces,
34
+ new Reference("expression"),
35
+ optionalSpaces,
36
+ new Literal("close-paren", ")")
37
+ ]);
38
+
39
+ const prefixExpression = new And("prefix-expression", [
40
+ prefixOperator,
41
+ new Reference("expression")
42
+ ]);
43
+
44
+ const optionalInfix = new And("infix-expression", [
45
+ infixOperator,
46
+ optionalSpaces,
47
+ new Reference("expression"),
48
+ ], true);
49
+
50
+ const optionalTernary = new And("ternary", [
51
+ new Literal("question-mark", "?"),
52
+ optionalSpaces,
53
+ new Reference("expression"),
54
+ optionalSpaces,
55
+ new Literal("colon", ":"),
56
+ optionalSpaces,
57
+ new Reference("expression")
58
+ ], true);
59
+
60
+ const optionalMemberAccesses = new Repeat("object-member-accesses",
61
+ new Or("object-member-access", [
62
+ invocation,
63
+ propertyAccess,
64
+ ]),
65
+ undefined, true
66
+ );
67
+
68
+ var variableName = name.clone("variable-name");
69
+
70
+ const expressions = new Or("expressions", [
71
+ newExpression,
72
+ deleteExpression,
73
+ groupExpression,
74
+ prefixExpression,
75
+ literal,
76
+ variableName,
77
+ ]);
78
+
79
+ const expression = new And("expression", [
80
+ expressions,
81
+ optionalInfix,
82
+ optionalTernary,
83
+ optionalMemberAccesses
84
+ ]);
85
+
86
+ export { expression }
87
+
@@ -0,0 +1,29 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Repeat } from "../../patterns/Repeat";
5
+ import { expression } from "./expression";
6
+ import { optionalSpaces } from "./optionalSpaces";
7
+
8
+ const assignmentOperators = new Or("assignment-operators", [
9
+ new Literal("assign", "="),
10
+ new Literal("addition-assign", "+="),
11
+ new Literal("subtraction-assign", "-="),
12
+ ]);
13
+
14
+ const assignment = new And("assignment", [
15
+ expression,
16
+ optionalSpaces,
17
+ assignmentOperators,
18
+ optionalSpaces,
19
+ ]);
20
+
21
+ const expressionStatement = new And("expressionStatement", [
22
+ new Repeat("assignments",
23
+ assignment),
24
+ optionalSpaces,
25
+ expression
26
+ ]);
27
+
28
+
29
+ export { expressionStatement }
@@ -0,0 +1,11 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Regex } from "../../patterns/Regex";
4
+
5
+ const period = new Literal("period", ".");
6
+ const digit = new Regex("digit", "\\d+");
7
+ const fraction = new And("fraction", [period, digit]);
8
+
9
+ export {
10
+ fraction
11
+ }
@@ -0,0 +1,36 @@
1
+ import { Literal } from "../../patterns/Literal"
2
+ import { Or } from "../../patterns/Or";
3
+
4
+ const multiply = new Literal("multiply", "*");
5
+ const divide = new Literal("divide", "/");
6
+ const remainder = new Literal("remainder", "%");
7
+ const add = new Literal("add", "+");
8
+ const subtract = new Literal("subtract", "-");
9
+ const greaterOrEqual = new Literal("greater-or-equal", ">=");
10
+ const lessOrEqual = new Literal("less-or-equal", "<=");
11
+ const greater = new Literal("greater", ">");
12
+ const less = new Literal("less", "<");
13
+ const equal = new Literal("equal", "===");
14
+ const notEqual = new Literal("not-equal", "!==");
15
+ const logicalOr = new Literal("logical-or", "||");
16
+ const logicalAnd = new Literal("logical-and", "&&");
17
+
18
+ const infixOperator = new Or("infix-operator", [
19
+ multiply,
20
+ divide,
21
+ remainder,
22
+ add,
23
+ subtract,
24
+ greaterOrEqual,
25
+ lessOrEqual,
26
+ greater,
27
+ less,
28
+ equal,
29
+ notEqual,
30
+ logicalOr,
31
+ logicalAnd
32
+ ]);
33
+
34
+ export { infixOperator }
35
+
36
+
@@ -0,0 +1,7 @@
1
+ import { Regex } from "../../patterns/Regex";
2
+
3
+ const integer = new Regex("integer", "([1-9][0-9]*)|0");
4
+
5
+ export {
6
+ integer
7
+ }
@@ -0,0 +1,28 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Reference } from "../../patterns/Reference";
5
+ import { Regex } from "../../patterns/Regex";
6
+ import { Repeat } from "../../patterns/Repeat";
7
+ import { optionalSpaces } from "./optionalSpaces";
8
+
9
+ const divider = new Regex("invocation-divider", "\\s*,\\s*");
10
+
11
+ const invocationWithArguments = new And("invocation-with-arguments", [
12
+ new Literal("open-paren", "("),
13
+ optionalSpaces,
14
+ new Repeat("expressions", new Reference("expression"), divider, true),
15
+ optionalSpaces,
16
+ new Literal("close-paren", ")"),
17
+ ]);
18
+
19
+ const emptyInvocation = new And("empty-invocation", [
20
+ new Literal("open-paren", "("),
21
+ optionalSpaces,
22
+ new Literal("close-paren", ")"),
23
+ ]);
24
+
25
+ export const invocation = new Or("invocation", [
26
+ emptyInvocation,
27
+ invocationWithArguments
28
+ ])
@@ -0,0 +1,14 @@
1
+ import { Or } from "../../patterns/Or";
2
+ import { arrayLiteral } from "./arrayLiteral";
3
+ import { numberLiteral } from "./numberLiteral";
4
+ import { objectLiteral } from "./objectLiteral";
5
+ import { stringLiteral } from "./stringLiteral";
6
+
7
+ const literal = new Or("literal", [
8
+ numberLiteral,
9
+ stringLiteral,
10
+ arrayLiteral,
11
+ objectLiteral,
12
+ ]);
13
+
14
+ export { literal }
@@ -0,0 +1,3 @@
1
+ import { Regex } from "../../patterns/Regex";
2
+
3
+ export const name = new Regex("name", "[a-zA-Z_]+[a-zA-Z0-9_]*");
@@ -0,0 +1,10 @@
1
+ import { And } from "../../patterns/And";
2
+ import { exponent } from "./exponent";
3
+ import { fraction } from "./fraction";
4
+ import { integer } from "./integer";
5
+
6
+ export const numberLiteral = new And("number-literal", [
7
+ integer,
8
+ fraction.clone("number-fraction", true),
9
+ exponent.clone("number-exponent", true)
10
+ ]);
@@ -0,0 +1,30 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Reference } from "../../patterns/Reference";
5
+ import { Regex } from "../../patterns/Regex";
6
+ import { Repeat } from "../../patterns/Repeat";
7
+ import { name } from "./name";
8
+ import { optionalSpaces } from "./optionalSpaces";
9
+ import { stringLiteral } from "./stringLiteral";
10
+
11
+ const propertyName = new Or("property-name", [stringLiteral, name]);
12
+ const property = new And("property", [
13
+ propertyName,
14
+ optionalSpaces,
15
+ new Literal("colon", ":"),
16
+ optionalSpaces,
17
+ new Reference("expression"),
18
+ ]);
19
+ const divider = new Regex("property-divider", "\\s*,\\s*");
20
+ const properties = new Repeat("properties", property, divider, true);
21
+
22
+ const objectLiteral = new And("object-literal", [
23
+ new Literal("open-curly-bracket", "{"),
24
+ optionalSpaces,
25
+ properties,
26
+ optionalSpaces,
27
+ new Literal("close-curly-bracket", "}"),
28
+ ]);
29
+
30
+ export { objectLiteral }
@@ -0,0 +1,3 @@
1
+ import { Regex } from "../../patterns/Regex";
2
+
3
+ export const optionalSpaces = new Regex("optional-spaces", "\\s+", true);
@@ -0,0 +1,20 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Regex } from "../../patterns/Regex";
4
+ import { Repeat } from "../../patterns/Repeat";
5
+ import { name } from "./name";
6
+
7
+ const divider = new Regex(",", "\\s*[,]\\s*");
8
+ divider.setTokens([", "]);
9
+
10
+ const optionalSpace = new Regex("optional-space", "\\s", true)
11
+
12
+ const parameters = new And("parameters", [
13
+ new Literal("open-paren", "("),
14
+ optionalSpace,
15
+ new Repeat("arguments", name, divider),
16
+ optionalSpace,
17
+ new Literal("close-paren", ")"),
18
+ ]);
19
+
20
+ export { parameters }
@@ -0,0 +1,13 @@
1
+ import { Literal } from "../../patterns/Literal";
2
+ import { Or } from "../../patterns/Or";
3
+ import { Regex } from "../../patterns/Regex";
4
+
5
+ const prefixOperator = new Or("prefix-operator", [
6
+ new Literal("typeof", "typeof "),
7
+ new Literal("to-number", "+"),
8
+ new Literal("negate", "-"),
9
+ new Literal("logical-not", "!"),
10
+ ]);
11
+
12
+ export { prefixOperator }
13
+
@@ -0,0 +1,23 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Reference } from "../../patterns/Reference";
5
+ import { name } from "./name";
6
+
7
+ const dotPropertyAccess = new And("dot-property-access", [
8
+ new Literal("period", "."),
9
+ name
10
+ ]);
11
+
12
+ const bracketPropertyAccess = new And("bracket-property-access", [
13
+ new Literal("open-square-bracket", "["),
14
+ new Reference("expression"),
15
+ new Literal("close-square-bracket", "]"),
16
+ ]);
17
+
18
+ const propertyAccess = new Or("property-access", [
19
+ dotPropertyAccess,
20
+ bracketPropertyAccess,
21
+ ]);
22
+
23
+ export { propertyAccess }
@@ -0,0 +1,28 @@
1
+ import { And } from "../../patterns/And";
2
+ import { Literal } from "../../patterns/Literal";
3
+ import { Or } from "../../patterns/Or";
4
+ import { Regex } from "../../patterns/Regex";
5
+ import { Repeat } from "../../patterns/Repeat";
6
+ import { escapedCharacter } from "./escapedCharacter";
7
+
8
+ const doubleQuoteStringLiteral = new And("double-string-literal", [
9
+ new Literal("double-quote", "\""),
10
+ new Repeat("characters", new Or("characters", [
11
+ new Regex("normal-characters", "[^\\\"]+"),
12
+ escapedCharacter
13
+ ])),
14
+ new Literal("double-quote", "\""),
15
+ ]);
16
+
17
+ const singleQuoteStringLiteral = new And("single-string-literal", [
18
+ new Literal("single-quote", "'"),
19
+ new Repeat("characters", new Or("characters", [
20
+ new Regex("normal-characters", "[^\\']+"),
21
+ escapedCharacter
22
+ ])),
23
+ new Literal("single-quote", "'"),
24
+ ]);
25
+
26
+ const stringLiteral = new Or("string-literal", [doubleQuoteStringLiteral, singleQuoteStringLiteral]);
27
+
28
+ export { stringLiteral }