|  | 
|  | 1 | +/* | 
|  | 2 | + | 
|  | 3 | + Copyright (C) 2020. rollrat All Rights Reserved. | 
|  | 4 | + | 
|  | 5 | + Author: Jeong HyunJun | 
|  | 6 | + | 
|  | 7 | +*/ | 
|  | 8 | + | 
|  | 9 | +using CC; | 
|  | 10 | +using System; | 
|  | 11 | +using System.Collections.Generic; | 
|  | 12 | +using System.Text; | 
|  | 13 | + | 
|  | 14 | +namespace JavascriptParser | 
|  | 15 | +{ | 
|  | 16 | + public class JSScannerGenerator | 
|  | 17 | + { | 
|  | 18 | + static Scanner scanner; | 
|  | 19 | + public static Scanner Scanner { get { if (scanner == null) create_scanner(); return scanner; } } | 
|  | 20 | + | 
|  | 21 | + /// <summary> | 
|  | 22 | + /// Create JavaScript Scanner | 
|  | 23 | + /// </summary> | 
|  | 24 | + private static void create_scanner() | 
|  | 25 | + { | 
|  | 26 | + var gen = new ScannerGenerator(); | 
|  | 27 | + | 
|  | 28 | + gen.PushRule("", @"[\r\n ]"); | 
|  | 29 | + //gen.PushRule("", @""); | 
|  | 30 | + gen.PushRule("Class", "class"); | 
|  | 31 | + gen.PushRule("Break", "break"); | 
|  | 32 | + gen.PushRule("Do", "do"); | 
|  | 33 | + gen.PushRule("Instanceof", "instanceof"); | 
|  | 34 | + gen.PushRule("Typeof", "typeof"); | 
|  | 35 | + gen.PushRule("Case", "case"); | 
|  | 36 | + gen.PushRule("Else", "else"); | 
|  | 37 | + gen.PushRule("New", "new"); | 
|  | 38 | + gen.PushRule("Var", "var"); | 
|  | 39 | + gen.PushRule("Catch", "catch"); | 
|  | 40 | + gen.PushRule("Finally", "finally"); | 
|  | 41 | + gen.PushRule("Return", "return"); | 
|  | 42 | + gen.PushRule("Void", "void"); | 
|  | 43 | + gen.PushRule("Continue", "continue"); | 
|  | 44 | + gen.PushRule("For", "for"); | 
|  | 45 | + gen.PushRule("Switch", "switch"); | 
|  | 46 | + gen.PushRule("While", "while"); | 
|  | 47 | + gen.PushRule("Debugger", "debugger"); | 
|  | 48 | + gen.PushRule("Function", "function"); | 
|  | 49 | + gen.PushRule("This", "this"); | 
|  | 50 | + gen.PushRule("With", "with"); | 
|  | 51 | + gen.PushRule("Default", "default"); | 
|  | 52 | + gen.PushRule("If", "if"); | 
|  | 53 | + gen.PushRule("Throw", "throw"); | 
|  | 54 | + gen.PushRule("Delete", "delete"); | 
|  | 55 | + gen.PushRule("In", "in"); | 
|  | 56 | + gen.PushRule("Try", "try"); | 
|  | 57 | + gen.PushRule("Enum", "enum"); | 
|  | 58 | + gen.PushRule("Extends", "extends"); | 
|  | 59 | + gen.PushRule("Super", "super"); | 
|  | 60 | + gen.PushRule("Const", "const"); | 
|  | 61 | + gen.PushRule("Export", "export"); | 
|  | 62 | + gen.PushRule("Import", "import"); | 
|  | 63 | + gen.PushRule("Implements", "implements"); | 
|  | 64 | + gen.PushRule("Let", "let"); | 
|  | 65 | + gen.PushRule("Private", "private"); | 
|  | 66 | + gen.PushRule("Public", "public"); | 
|  | 67 | + gen.PushRule("Interface", "interface"); | 
|  | 68 | + gen.PushRule("Package", "package"); | 
|  | 69 | + gen.PushRule("Protected", "protected"); | 
|  | 70 | + gen.PushRule("Static", "static"); | 
|  | 71 | + gen.PushRule("Yield", "yield"); | 
|  | 72 | + //gen.PushRule("SemiColon", @"SemiColon"); | 
|  | 73 | + | 
|  | 74 | + gen.PushRule("{", @"\{"); | 
|  | 75 | + gen.PushRule("}", @"\}"); | 
|  | 76 | + gen.PushRule(",", @",円"); | 
|  | 77 | + gen.PushRule("(", @"\("); | 
|  | 78 | + gen.PushRule(")", @"\)"); | 
|  | 79 | + gen.PushRule(";", @"\;"); | 
|  | 80 | + gen.PushRule("*", @"\*"); | 
|  | 81 | + gen.PushRule("[", @"\["); | 
|  | 82 | + gen.PushRule("]", @"\]"); | 
|  | 83 | + gen.PushRule(".", @"\."); | 
|  | 84 | + gen.PushRule("++", @"\+\+"); | 
|  | 85 | + gen.PushRule("--", @"\-\-"); | 
|  | 86 | + gen.PushRule("+", @"\+"); | 
|  | 87 | + gen.PushRule("-", @"\-"); | 
|  | 88 | + gen.PushRule("~", @"\~"); | 
|  | 89 | + gen.PushRule("!", @"\!"); | 
|  | 90 | + gen.PushRule("/", @"\/"); | 
|  | 91 | + gen.PushRule("%", @"\%"); | 
|  | 92 | + gen.PushRule("<<", @"\<\<"); | 
|  | 93 | + gen.PushRule(">>", @"\>\>"); | 
|  | 94 | + gen.PushRule(">>>", @"\>\>\>"); | 
|  | 95 | + gen.PushRule("<", @"\<"); | 
|  | 96 | + gen.PushRule(">", @"\>"); | 
|  | 97 | + gen.PushRule("<=", @"\<\="); | 
|  | 98 | + gen.PushRule(">=", @"\>\="); | 
|  | 99 | + gen.PushRule("==", @"\=\="); | 
|  | 100 | + gen.PushRule("===", @"\=\=\="); | 
|  | 101 | + gen.PushRule("!==", @"\!\=\="); | 
|  | 102 | + gen.PushRule("&", @"\&"); | 
|  | 103 | + gen.PushRule("^", @"\^"); | 
|  | 104 | + gen.PushRule("|", @"\|"); | 
|  | 105 | + gen.PushRule("&&", @"\&\&"); | 
|  | 106 | + gen.PushRule("||", @"\|\|"); | 
|  | 107 | + gen.PushRule("?", @"\?"); | 
|  | 108 | + gen.PushRule("=>", @"\=\>"); | 
|  | 109 | + gen.PushRule("*=", @"\*\="); | 
|  | 110 | + gen.PushRule("/=", @"\/\="); | 
|  | 111 | + gen.PushRule("%=", @"\%\="); | 
|  | 112 | + gen.PushRule("+=", @"\+\="); | 
|  | 113 | + gen.PushRule("-=", @"\-\="); | 
|  | 114 | + gen.PushRule("<<=", @"\<\<\="); | 
|  | 115 | + gen.PushRule(">>=", @"\>\>\="); | 
|  | 116 | + gen.PushRule("&=", @"\&\="); | 
|  | 117 | + gen.PushRule("^=", @"\^\="); | 
|  | 118 | + gen.PushRule("|=", @"\|\="); | 
|  | 119 | + | 
|  | 120 | + gen.PushRule("StringLiteral", @"""([^""\\]|\\.)*"""); | 
|  | 121 | + gen.PushRule("DecimalLiteral", @"[0-9]+(\.[0-9]+)?([Ee][\+\-]?[0-9]+)?"); | 
|  | 122 | + gen.PushRule("BinaryIntegerLiteral", @"[0-9]+b"); | 
|  | 123 | + gen.PushRule("HexIntegerLiteral", @"0x[0-9]+"); | 
|  | 124 | + gen.PushRule("OctalIntegerLiteral", @"0[oO][0-9]+"); | 
|  | 125 | + gen.PushRule("BooleanLiteral", @"true|false"); | 
|  | 126 | + gen.PushRule("Identifier", @"[_$a-zA-Z][_$a-zA-Z0-9]*"); | 
|  | 127 | + | 
|  | 128 | + gen.Generate(); | 
|  | 129 | + | 
|  | 130 | + Console.WriteLine(gen.PrintDiagram()); | 
|  | 131 | + | 
|  | 132 | + scanner = gen.CreateScannerInstance(); | 
|  | 133 | + } | 
|  | 134 | + } | 
|  | 135 | +} | 
0 commit comments