資源簡介
識別保留字:if、int、for、while、do、return、break、continue等等;單詞種別碼為1。
其他的都識別為標識符;單詞種別碼為2。
常數為整數或浮點數;單詞種別碼為3。
運算符包括:+、-、*、/、=、>、=、<=、!= ;單詞種別碼為4。
分隔符包括: “,”“;”“(”“)”“{”“}”等; 單詞種別碼為5。
處理注釋(去掉注釋): /* */
其他的都識別為標識符;單詞種別碼為2。
常數為整數或浮點數;單詞種別碼為3。
運算符包括:+、-、*、/、=、>、=、<=、!= ;單詞種別碼為4。
分隔符包括: “,”“;”“(”“)”“{”“}”等; 單詞種別碼為5。
處理注釋(去掉注釋): /* */

代碼片段和文件信息
import?javax.swing.JTextArea;
public?class?LexicalAnalyzer?{
????static?String[]?rwtab=new?String[]{“main““if““then““while““do““static“
????????????????????????????????“int““double““struct““break““else“
????????????????????????????????“long““switch““case““typedef““char“
????????????????????????????????“return““const““float““short““continue“
????????????????????????????????“for““void““sizeof“};???//已經定義的24個關鍵字,種別碼從1開始
????static?String?storage=““;???//存儲源程序字符串
????static?StringBuilder?token=new?StringBuilder(““);?????//存儲單詞自身組成的字符串
????private?char?lastchar; //單個讀取字符
????private?int?index=0; //單行字符串腳標
????private?int?syn; //種別碼
????private?int?row=1;
?????//分析器
?????void?analyzer(){
????????token.delete(0?token.length());????????????????//置空token對象,清除
????????lastchar=storage.charAt(index); //索引指向第0位
????????if(((lastchar>=‘a‘&&lastchar<=‘z‘)||(lastchar>=‘A‘&&lastchar<=‘Z‘))&&index ???????? index++;?
???????? token.append(lastchar);
????????????while(((lastchar>=‘0‘&&lastchar<=‘9‘)||(lastchar>=‘a‘&&lastchar<=‘z‘)||(lastchar>=‘A‘&&lastchar<=‘Z‘))&&index ???????????? lastchar=storage.charAt(index++);
???????????? if((lastchar>=‘0‘&&lastchar<=‘9‘)||(lastchar>=‘a‘&&lastchar<=‘z‘)||(lastchar>=‘A‘&&lastchar<=‘Z‘))?{
???????????? token.append(lastchar);
???????????? }else?{
???????????? index--;
???????????? }
????????????}
????????????syn=2;???????//默認為識別出的字符串為自定義的標識符,種別碼為2
????????????String?s=token.toString();
????????????for(int?i=0;?i ????????????????if(s.equals(rwtab[i])){?????
????????????????????syn=1;
????????????????????break;????????//識別出是關鍵字
????????????????}
????????????}
????????}else?if((lastchar>=‘0‘&&lastchar<=‘9‘)&&index ???????? index++;
???????? token.append(lastchar);
????????????while((lastchar>=‘0‘&&lastchar<=‘9‘||lastchar==‘.‘)&&index ????????????????lastchar=storage.charAt(index++);
????????????????if((lastchar>=‘0‘&&lastchar<=‘9‘)||lastchar==‘.‘)?{
???????????????? ?token.append(lastchar);
????????????????}else?{
???????????????? index--;
????????????????}
????????????}
????????????syn=3; //整數的種別碼為3
????????}else?if(index ???????? index++;
???????? switch(lastchar){
???????? case?‘+‘:
????????????case?‘-‘:
????????????case?‘*‘:
???????????? token.append(lastchar);
???????????? syn=4;
???????????? break;
????????????case?‘<‘:
????????????????token.append(lastchar);
????????????????syn=4;
????????????????if(index ???????????????? lastchar=storage.charAt(index);
????????????????????if(lastchar==‘=‘){
????????????????????????token.append(lastchar);
????????????????????????index++;
????????????????????}else?if(lastchar==‘>‘){
????????????????????????token.append(lastchar);
????????????????????????index++;
????????????????????}
????????????????}
????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????5908??2019-11-24?21:03??LexicalAnalyzer.java
?????文件????????2383??2019-11-24?21:03??Mainfr
?????文件????????4633??2019-11-29?13:40??詞法分析器.jar
評論
共有 條評論