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' ;
22import { dirname , join } from 'path' ;
33import { existsSync , readFileSync , readdirSync , statSync , writeFileSync } from 'fs' ;
44import { 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 */
398385export 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