锛圔abel鍘熺悊锛燂級鏁欎綘濡備綍鐢ㄤ笉鍒?00琛屼唬鐮佸疄鐜拌嚜宸辩殑瓒呯骇杩蜂綘缂栫▼璇█銆傝瘝鐨勫師鍥犮€傦紙閭瑧锛夊甫鐫€闂瀛︿範锛氬悇绉嶇紪绋嬭瑷€灞傚嚭涓嶇┓锛屼緷娆′細鐢熸垚寰堝涓嶅悓鍚庣紑鐨勬枃浠讹紙.js,.jsx,.ts,.py,.go,.php,.java锛夛紝杩欎簺鏂囦欢鐨勫唴瀹瑰浜庣▼搴忓憳鏉ヨ鏄€昏緫琛ㄨ揪锛屼絾鏄浜庤绠楁満鏉ヨ锛屽畠浠槸涓嶅悓鍚庣紑鐨勪簩杩涘埗鏂囦欢锛岄偅涔堝畠浠浣曟垚涓烘満鍣ㄥ彲浠ョ悊瑙g殑璇█鍛紵濡傛灉鎴戞兂瀹炵幇涓€绉嶅甫鏈夎嚜宸辩殑鍚庣紑鐨勮瑷€锛屽簲璇ュ浣曞疄鐜板憿锛熺紪绋嬭瑷€鏄竴缁勫皢瀛楃涓茶浆鎹负鍚勭鏈哄櫒浠g爜杈撳嚭鐨勮鍒欍€傜畝鑰岃█涔嬶紝缂栫▼璇█鍙槸涓€缁勯瀹氫箟鐨勮鍒欍€傛湁涓€瀹氱殑缂栫▼鑼冨紡锛岀劧鍚庨€氳繃缂栬瘧鍣?瑙i噴鍣ㄨ浆鎹㈡垚鏈哄櫒璇█锛屾帶鍒惰绠楁満鐨勮繍琛屻€傝€屼粖澶╂垜浠鐢╦s鏉ュ疄鐜颁竴涓畝鍗曠殑瑙i噴鍣ㄣ€傚厛鐪嬫晥鏋溿€傛柊寤烘枃浠禿emo.fjk鍐呭涓猴細杈撳嚭鈥淗elloworld鈥濊緭鍑衡€滃搱鍝堝搱鈥濊繍琛屽緱鍒帮細鏍稿績浠g爜鍙湁120琛屻€傝繖鍙槸鎯虫硶涔嬩竴銆傚彲浠ヤ娇鐢ㄨ嚜宸辩殑鍚庣紑缁撳悎webpack锛屼娇鐢ㄨ嚜宸辩殑loader鏉ヨВ鏋愬鐞嗐€?1.浣跨敤nodejs鑾峰彇缂栫▼鏂囦欢锛岃鍙栫紪绋嬫暟鎹€傚悇浣嶅墠杈堜笉鏄垎鍒嗛挓鐨勪簨鍚楋紵//demo.fjk杈撳嚭鈥淗elloWorld鈥濊緭鍑衡€滃搱鍝堝搱鈥?/index.jsconstFjk=require('./Fjk')constfs=require('fs')constpath=require('path')constcodes=fs.readFileSync(path.join(__dirname,'./demo.fjk'),'utf8').toString().replace(/\r/g,'/n')constmagenta=newFjk(codes);magenta.run();澶ц嚧鐪嬩竴涓嬶紝鎴戜滑鍏堣鍙杁emo.fjk鏂囦欢鐨勫唴瀹癸紝鐒跺悗鏇挎崲鎺夐噷闈㈢殑鎹㈣绗︼紝鐒跺悗灏嗚鍙栧埌鐨勪唬鐮佷紶缁橣jk鍒涘缓鐨勭被瀹炰緥灏辨槸澶勭悊瀹屾瘯锛屾墽琛宺un鏂规硶鎵цdemo.fjk绋嬪簭銆?2.瀹炵幇杩欎釜Fjk绫伙紝棣栧厛鎺ュ彈浼犲叆鐨勪唬鐮乧onstructor鏋勯€犲嚱鏁帮紝鐒跺悗瀹炵幇run鍑芥暟鎵ц杩欎覆浠g爜classFjk{constructor(codes){this.codes=codes;}杩愯锛堬級{鎺у埗鍙般€俵og(this.codes)}}鍒版缁撴潫銆傚搱鍝堬紝鎱屼簡鏄惂锛燄煒勷煒勷煒勭湡姝g殑瀹炵幇鎵嶅垰鍒氬紑濮?3.瀹炵幇涓€涓畝鍗曠殑璇嶆硶鍒嗘瀽锛屾妸杈撳叆鐨勪唬鐮佷覆鍙樻垚涓€涓彲璇荤殑銆佺鍚堥€昏緫鐨勬暟鎹粨鏋勶紙AST璇硶鏍戯級0鍏堟彁鍙栧父鐢ㄥ父閲廲onstPrintStr="Output";constTokenTypes={String:"string",Print:"print",Varchar:"varchar",}1.鏁翠綋鎬濊矾绠€鍗曞垎鏋愮涓€姝ユ槸鍒涘缓娓告爣锛岃褰曞綋鍓嶈В鏋愪綅缃浜屾鏄垱寤轰竴涓垪琛ㄦ潵璁板綍瑙f瀽鍚庣殑鏁版嵁銆傜涓夋锛岄€愯瘝瑙f瀽銆佸垽鏂€佸垎鏋愩€傚ぇ鑷翠唬鐮佺粨鏋勫涓嬶細锛堟枃鏈檮GitHub鍦板潃锛屾彁渚涘畬鏁翠唬鐮侊級//璇嶆硶鍒嗘瀽tokenize(){constlength=this.codes.length;//璁板綍褰撳墠瑙f瀽浣嶇疆letpos=0;璁╂爣璁?[];while(pos
