| Description | uses | Classes, Interfaces, Objects and Records | Functions and Procedures | Types | Constants | Variables |
Parser wyrazenia matematycznego. Zrobiony specjalnie aby obejmowac mozliwie wygodna skladnia wszystko co moze zaoferowac klasa TMathExpr.
Gramatyka w EBNF : (wiele komentarzy jest w dokumentacji [http://vrmlengine.sourceforge.net/glplotter_and_gen_function.php#section_math_expr_syntax]. Usunalem je stad zeby nie duplikowac informacji.)
czynnik = NAZWA_ZMIENNEJ | STALA | "-" czynnik | "(" wyrazenie_math ")" | NAZWA_FUNKCJI [ "(" wyrazenie_math [{"," wyrazenie_math}] ")" ] | "[" wyrazenie_math operator_relacyjny wyrazenie_math "]" skladnik = czynnik [{operator_multiplikatywny czynnik}] wyrazenie_math = skladnik [{operator_addytywny skladnik}] operator_multiplikatywny = "ˆ" | "*" | "/" | "%" operator_addytywny = "+" | "-" operator_relacyjny = "<" | ">" | "<=" | ">=" | "=" | "<>"
(czesc rozwiazywana przez Lexer :) NAZWA_ZMIENNEJ = LITERA [{LITERA | CYFRA}] STALA = "pi" | "enat" | CYFRA [{CYFRA}] ["." CYFRA [{CYFRA}] ] NAZWA_FUNKCJI = (see glplotter and gen_function docs) LITERA = nieformalnie 'a' .. 'z' | 'A' .. 'Z' | "_" (tak, znaku podkreslenia mozna uzyc wszedzie tam gdzie litery) CYFRA = '0' .. '9'
(token = terminal w czesci gramatyki rozwiazywanej przez parser lub nieterminal w czesci gramatyki rozwiazywanej przez Lexer. Generalnie pomiedzy kazdymi dwoma tokenami musi byc przynajmniej jeden bialy znak - spacja, #10, #13, lub tab. Ale sa wyjatki gdy mozna jednoznacznie rozpoznac koniec jednego tokenu, np. gdy dwa tokeny pochodza z dwoch roznych zbiorow - jeden sposrod cyfr/liter/_ a drugi z reszty. W razie watpliwosci Lexer bedzie pobieral tokeny zachlannie. )
| Name | Description |
|---|---|
Class EMathParserError |
function ParseMathExpr(const S: string): TMathExpr; |
function EvalConstMathExpr(const S: string): Float; |
EMathSyntaxError = MathExprLexer.EMathSyntaxError; |
function ParseMathExpr(const S: string): TMathExpr; |
|
Creates and returns instance of TMathExpr, that represents parsed tree of expression in S. |
function EvalConstMathExpr(const S: string): Float; |
|
This can be used as a great replacement for StrToFloat. This takes a string with any constant mathematical expression, parses it and calculates (with all variable names undefined, i.e. EUndefinedVariable will be raised if expression will try to use some variable name). |
EMathSyntaxError = MathExprLexer.EMathSyntaxError; |
|
Reexported in this unit, so that the identifier |