JavaCUP是Java语言实现的CUP解析器生成器。
示例代码:
//SimpleExampleScaerClass//scaer.javaimportjava_cup.rutime.*;importjava.io.*;//importsym;publicclassscaerimplemetsjava_cup.rutime.Scaer{/*siglelookaheadcharacter*/protectedstaticitext_char;//sicecupv11weuseSymbolFactoriesratherthaSymbolsprivateSymbolFactorysf=ewDefaultSymbolFactory();privatestaticFileReaderfileReader;publicscaer(FileReaderfr){this.fileReader=fr;}/*advaceiputbyoecharacter*/protectedstaticvoidadvace()throwsjava.io.IOExceptio{ext_char=fileReader.read();}/*iitializethescaer*/publicstaticvoidiit()throwsjava.io.IOExceptio{advace();}/*recogizeadreturtheextcompletetoke*/publicSymbolext_toke()throwsjava.io.IOExceptio{for(;;)switch(ext_char){case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':/*parseadecimaliteger*/iti_val=0;do{i_val=i_val*10+(ext_char-'0');advace();}while(ext_char>='0'&&ext_char<='9');retursf.ewSymbol("NUMBER",sym.NUMBER,ewIteger(i_val));case';':advace();retursf.ewSymbol("SEMI",sym.SEMI);case'+':advace();retursf.ewSymbol("PLUS",sym.PLUS);case'-':advace();retursf.ewSymbol("MINUS",sym.MINUS);case'*':advace();retursf.ewSymbol("TIMES",sym.TIMES);case'/':advace();retursf.ewSymbol("DIVIDE",sym.DIVIDE);case'%':advace();retursf.ewSymbol("MOD",sym.MOD);case'(':advace();retursf.ewSymbol("LPAREN",sym.LPAREN);case')':advace();retursf.ewSymbol("RPAREN",sym.RPAREN);case-1:retursf.ewSymbol("EOF",sym.EOF);default:/*ithissimplescaerwejustigoreeverythigelse*/advace();break;}}};







评论