2014-02-20 30 views
-1

如何檢查字符串是否是正確的線性函數(數學)?檢查一個字符串是否是正確的線性函數 - java

我使用Jfreechart庫,其中需要一個線性函數來繪製圖形。 Jfree庫中有一個Function2D類,我用它這樣的:

package NALIG; 

import org.jfree.data.function.Function2D; 

import expr.Expr; 
import expr.Parser; 
import expr.SyntaxException; 
import expr.Variable; 

/** 
* The function. 
*/ 
public class Fx implements Function2D { 

private String formula; 

public Fx(String f){ 
    formula = f; 
} 
/* (non-Javadoc) 
* @see org.jfree.data.function.Function2D#getValue(double) 
*/ 
public double getValue(double x) { 

    Expr expr = null; 

    try { 
     expr = Parser.parse(formula); 
    } catch (SyntaxException e) { 
     System.err.println("formula error syntaxExeption"); 
     System.err.println(e.explain()); 
    } 
    Variable vx = Variable.make("x"); 
    vx.setValue(x); 



    return expr.value(); 
} 
} 

但問題是,syntaxExeption不是很正確(數學)工作。 在後續的例子扔無syntaxExeption(這在數學上是不正確的):

f(x)=xd not throw error 
f(x)=1+xd not throw error 

適當的後續工作:

f(x)=; (or starting with any other symbol or alone symbol: [email protected]#$%^&*()_+;'[]{}|\") throw syntaxExeption 
f(x)=x+ (or any other symbol in position of "+" like [email protected]#$%^&*()_+;'[]{}|\") throw syntaxExeption 

***用於檢查輸入的字符串AFTER =

* ** SyntaxExeption的源代碼是here

在此先感謝

+0

syntex沒有明確定義。可能你需要的是javacc,它允許你定義自己的語法。 –

+0

@KelvinNg你不幫我對不起... – Universe

回答

0

你這樣做的方式與確認任何其他輸入格式正確無誤:試圖解析它。

查找您用來表達函數的正式語法。爲該語言實現一個解析器 - 可以通過遞歸下降法,也可以使用javacc或較早的lex/yacc對之類的「編譯器編譯器」工具包之一。如果解析器發現輸入偏離可接受的形式語法,請報告錯誤。根據語言的不同,您可能需要處理構建符號表和跟蹤子表達式類型以及進行其他類型的交叉檢查;這些操作通常可以由解析器驅動,或者至少數據收集可以由解析器通過解析後傳遞來分析該數據。

根據語言的結構以及您願意工作的難易程度,您每次嘗試可能會或可能不會報告多個錯誤。但是,簡單的是/否格式檢查通常很簡單。

有關詳細信息,恐怕會超出Stack Overflow答案的合理範圍。

相關問題