2016-04-06 28 views

cevap

1

Ne yapmaya çalıştığınıza bağlı olarak değişir. Daha karmaşık durumlar için ANTLR gibi bir ayrıştırıcı jeneratörü kullanmanız/kullanmanız gerekir. İfadeler daha karmaşık değilse, o zaman örnekleriniz (basit aritmetikler), yalnızca ifadeleri JavaScript/Nashorn ile analiz etmeye çalışabilirsiniz.

yapabileceğini Use the backreference in a regex to replace a text dynamically çözümünü kullanarak: JavaScript çözümü/Ağır yavaş ise

public static void main(String[] args) throws ScriptException { 

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); 
    String x = "(3+5)x + x^(6/2)"; 

    // can also be extended to expressions like 3+5*5 with 
    // Pattern.compile("\\(\\d+([+/*-]\\d+)+\\)") 
    Pattern simpleArithmeticExpr = Pattern.compile("\\(\\d+[+/]\\d+\\)"); 
    Matcher matcher = simpleArithmeticExpr.matcher(x); 
    StringBuffer sb = new StringBuffer(); 
    while (matcher.find()) { 
     String expr = matcher.group(); 
     String evaluatedExpr = String.valueOf(engine.eval(expr)); 
     matcher.appendReplacement(sb, evaluatedExpr); 
    } 
    matcher.appendTail(sb); 
    System.out.println(sb); // 8x + x^3 

} 

, bağlantıyı siz de ayrıştırmak başladı.

+0

Yardımlarınız için çok teşekkür ederim! – nilcit

İlgili konular