Skip to content

Commit d70b852

Browse files
committed
extract generating operator regex to a namespace to make it public
1 parent 9dae5f2 commit d70b852

File tree

1 file changed

+34
-15
lines changed

1 file changed

+34
-15
lines changed

src/compiler.ts

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CompileStatement, CompilerError, ImportStatement, ImportsStatement, NodeType, PrimitiveTypeExpression, StringExpression, TokenType, VariableExpression, statementIsA } from './types.js';
1+
import { CompileStatement, CompilerError, ImportStatement, ImportsStatement, NodeType, OperatorStatement, PrimitiveTypeExpression, StringExpression, TokenType, VariableExpression, statementIsA } from './types.js';
22
import { dirname, join } from 'path';
33
import { existsSync, readFileSync, readdirSync, statSync, writeFileSync } from 'fs';
44
import { sysparser, syxparser } from './ast.js';
@@ -80,20 +80,7 @@ export class SyntaxScriptCompiler {
8080

8181

8282
//# Generate regexMatcher
83-
let regexMatcher: RegExp = new RegExp('');
84-
statement.regex.forEach(regexStatement => {
85-
86-
if (regexStatement.type === NodeType.PrimitiveType) {
87-
regexMatcher = new RegExp(regexMatcher.source + regexes[(regexStatement as PrimitiveTypeExpression).value].source);
88-
}
89-
if (regexStatement.type === NodeType.WhitespaceIdentifier) {
90-
regexMatcher = new RegExp(regexMatcher.source + regexes['+s'].source);
91-
}
92-
if (regexStatement.type === NodeType.String) {
93-
regexMatcher = new RegExp(regexMatcher.source + escapeRegex((regexStatement as StringExpression).value));
94-
}
95-
96-
});
83+
const regexMatcher: RegExp = CompilerFunctions.generateRegexMatcher(statement);
9784

9885
const operatorStmtExport: ExportedOperator = { imports: {}, outputGenerators: {}, regexMatcher, type: ExportType.Operator };
9986

@@ -397,4 +384,36 @@ export const regexes: Record<string, RegExp> = {
397384
*/
398385
export function escapeRegex(src: string): string {
399386
return src.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
387+
}
388+
389+
export namespace CompilerFunctions {
390+
391+
392+
/**
393+
* Generates {@link RegExp} of the given operator statement.
394+
* @param statement An operator statement.
395+
* @returns A regular expression generated from regex of the operator statement.
396+
* @author efekos
397+
* @version 1.0.0
398+
* @since 0.0.2-alpha
399+
*/
400+
export function generateRegexMatcher(statement:OperatorStatement):RegExp{
401+
let regexMatcher = new RegExp('');
402+
statement.regex.forEach(regexStatement => {
403+
404+
if (regexStatement.type === NodeType.PrimitiveType) {
405+
regexMatcher = new RegExp(regexMatcher.source + regexes[(regexStatement as PrimitiveTypeExpression).value].source);
406+
}
407+
if (regexStatement.type === NodeType.WhitespaceIdentifier) {
408+
regexMatcher = new RegExp(regexMatcher.source + regexes['+s'].source);
409+
}
410+
if (regexStatement.type === NodeType.String) {
411+
regexMatcher = new RegExp(regexMatcher.source + escapeRegex((regexStatement as StringExpression).value));
412+
}
413+
414+
});
415+
416+
return regexMatcher;
417+
}
418+
400419
}

0 commit comments

Comments
 (0)