java cup_JavaCUP

软件简介

JavaCUP 是 Java 语言实现的 CUP 解析器生成器。

示例代码:

// Simple Example Scanner Class

// scanner.java

import java_cup.runtime.*;

import java.io.*;

//import sym;

public class scanner implements java_cup.runtime.Scanner {

/* single lookahead character */

protected static int next_char;

// since cup v11 we use SymbolFactories rather than Symbols

private SymbolFactory sf = new DefaultSymbolFactory();

private static FileReader fileReader;

public scanner(FileReader fr){

this.fileReader=fr;

}

/* advance input by one character */

protected static void advance()

throws java.io.IOException

{ next_char = fileReader.read(); }

/* initialize the scanner */

public static void init()

throws java.io.IOException

{ advance(); }

/* recognize and return the next complete token */

public Symbol next_token()

throws java.io.IOException

{

for (;;)

switch (next_char)

{

case '0': case '1': case '2': case '3': case '4':

case '5': case '6': case '7': case '8': case '9':

/* parse a decimal integer */

int i_val = 0;

do {

i_val = i_val * 10 + (next_char - '0');

advance();

} while (next_char >= '0' && next_char <= '9');

return sf.newSymbol("NUMBER",sym.NUMBER, new Integer(i_val));

case ';': advance(); return sf.newSymbol("SEMI",sym.SEMI);

case '+': advance(); return sf.newSymbol("PLUS",sym.PLUS);

case '-': advance(); return sf.newSymbol("MINUS",sym.MINUS);

case '*': advance(); return sf.newSymbol("TIMES",sym.TIMES);

case '/': advance(); return sf.newSymbol("DIVIDE",sym.DIVIDE);

case '%': advance(); return sf.newSymbol("MOD",sym.MOD);

case '(': advance(); return sf.newSymbol("LPAREN",sym.LPAREN);

case ')': advance(); return sf.newSymbol("RPAREN",sym.RPAREN);

case -1: return sf.newSymbol("EOF",sym.EOF);

default:

/* in this simple scanner we just ignore everything else */

advance();

break;

}

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值