本發(fā)明是一種關(guān)于計(jì)算機(jī)語(yǔ)言詞法解析的工具,特別是在提升數(shù)據(jù)處理效率方面的以及在改善代碼執(zhí)行效率方面的工具。
背景技術(shù):
編譯器主要由三個(gè)部分組成,前端,中間和后端。而前端是由詞法解析器和語(yǔ)法解析器組成,現(xiàn)有的詞法解析器靈活性不夠,擴(kuò)展性不強(qiáng)。主要體現(xiàn)在現(xiàn)有詞法分析器只針對(duì)特定格式或規(guī)則的代碼進(jìn)行解析,只能滿足一些基本的詞法規(guī)則需求,面對(duì)現(xiàn)在計(jì)算機(jī)語(yǔ)言種類繁多的現(xiàn)狀,現(xiàn)有的詞法解析器已經(jīng)無(wú)法處理各種計(jì)算機(jī)語(yǔ)言之間的交流問(wèn)題了。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明主要提供一種不同計(jì)算機(jī)語(yǔ)言代碼之間的轉(zhuǎn)譯工具。目前計(jì)算機(jī)語(yǔ)言種類繁多,各種語(yǔ)言之間的互通性極差,本發(fā)明可以解析目前所有主流計(jì)算機(jī)語(yǔ)言詞法,并將解析之后的token進(jìn)行特定格式化的輸出。工具讀取輸入的源代碼程序,逐步分析源代碼字符串,將符合詞法規(guī)則的字符切割為帶標(biāo)記的詞法單元,然后將這些詞法單元存入一個(gè)集合,最后格式化輸出。本發(fā)明的詞法規(guī)則支持目前所有主流的計(jì)算機(jī)語(yǔ)言,能解決這些語(yǔ)言之間的轉(zhuǎn)譯和相關(guān)程序上的兼容問(wèn)題。
發(fā)明內(nèi)容具體實(shí)施方式詳細(xì)描述:
啟動(dòng)工具,輸入一段代碼或者一個(gè)包含代碼的文件,代碼的語(yǔ)言類型可以是任意的,包括但不限于目前主流的計(jì)算機(jī)語(yǔ)言。經(jīng)過(guò)工具解析處理,包括如下步驟:
步驟一,工具讀取源語(yǔ)言代碼,將源代碼視為字符串s作為輸入源,創(chuàng)建集合list用于存放結(jié)果,循環(huán)遍歷源代碼,在循環(huán)中開(kāi)始切割字源代碼字符串;
步驟二,切割字符串需要兩個(gè)參數(shù),源字符串s和開(kāi)始位置beign,切割完返回一個(gè)token,token是一個(gè)包含value,type,errorcode屬性的記號(hào)實(shí)體類,其中value是string類型,type是枚舉類型,errorcode是int類型;
具體切割方法如下:
1.對(duì)第一個(gè)字符進(jìn)行判斷,如果第一個(gè)字符屬于[0-9a-za-z_]和unicode字符128-65535區(qū)間內(nèi),則繼續(xù)讀入下一個(gè),直至讀到不屬于這個(gè)區(qū)間內(nèi)的字符,記錄下本次讀入字符的個(gè)數(shù)作為一個(gè)長(zhǎng)度len,源字符串s將從開(kāi)始位置begin截取長(zhǎng)度為len的子串作為token的value,返回token作為切割結(jié)果;
2.如果第一個(gè)字符不屬于[0-9a-za-z_]和unicode字符128-65535區(qū)間內(nèi),則從源字符串s開(kāi)始位置begin截取長(zhǎng)度為1的子串作為token的value,返回token作為切割結(jié)果;
步驟三,對(duì)返回的token進(jìn)行分析處理,處理過(guò)程如下:
1.判斷token的value.length是否大于1,如果token的value.length大于1,則token的type將是是系統(tǒng)保留字(syskeep)、變量名稱(variable)、純數(shù)字(number)或者小數(shù)(decimal)中的一種;
2.如果token的value.length等于1,則預(yù)讀源字符串begin位置的下一個(gè)字符,由預(yù)讀的下一個(gè)字符來(lái)決定返回的token的value以及type,例如,本次返回的token的value為“+”,如果預(yù)讀的下一個(gè)字符為‘+’或者‘=’,則修改這個(gè)token的value為“++”或者“+=”,跳出判斷。再如返回的token的value為“"”,則在源字符串從token的開(kāi)始位置往后查找‘"’,如果查到,則修改token的value為源字符串兩個(gè)‘"’之間的子串并跳出判斷,如果沒(méi)有查到,則修改token的errorcode并返回。token的value.length為1的情況較多,在此不在敖述。
步驟四,將分析處理之后的token放入list集合,并給token對(duì)象設(shè)置指針屬性方便后續(xù)使用,同時(shí)修改開(kāi)始位置,begin=begin+token.value.length,循環(huán)步驟二至步驟四,直至讀取到源字符串末尾結(jié)束循環(huán);
步驟五,返回list結(jié)果集合,后端輸出模塊對(duì)結(jié)果集進(jìn)行循環(huán)遍歷,輸出token的value,檢查token中的errorcode,如果果有errorcode,則進(jìn)行報(bào)錯(cuò)處理,否則直至循環(huán)結(jié)束,本次解析成功。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。