【初心者】Java質問・相談スレッド101【大歓迎】at TECH【初心者】Java質問・相談スレッド101【大歓迎】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト600:デフォルトの名無しさん 07/05/17 16:29:41 >599さん ありがとうございました(^3^)/ 601:デフォルトの名無しさん 07/05/17 17:21:48 >>593 jay+JFlexならこんな感じで --Calculator.jay %{ public class Calculator { private Integer result; %}%token <Integer> NUMBER %type <Integer> expr %left '+' %left '*' %% string: | string expr { result = $2; } expr: NUMBER { $$ = $1; } | expr '+' expr { $$ = Integer.valueOf($1.intValue() + $3.intValue()); } | expr '*' expr { $$ = Integer.valueOf($1.intValue() * $3.intValue()); }; %% public String eval(String expr) throws Calculator.yyException, java.io.IOException { yyparse(new Lexer(new java.io.StringReader(expr))); return String.valueOf(result); } } 602:デフォルトの名無しさん 07/05/17 17:23:27 --Lexer.flex %% %public %class Lexer %implements Calculator.yyInput %type int %eofval{ return YYEOF; %eofval} %{ private int token; private Object value; public boolean advance() throws java.io.IOException { return (token = yylex()) != YYEOF; } public int token() { return token; } public Object value() { return value; } %} %% " " { } [1-9][0-9]* { value = Integer.valueOf(yytext()); return(Calculator.NUMBER); } . { return yytext().charAt(0); } --Test.java public class Test { public static void main(String[] args) throws Exception { String expr = "12 + 3 * 7"; Calculator calc = new Calculator(); String value = calc.eval(expr); System.out.println(expr + " = " + value); } } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch