New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

User defined arguments ending in e #10

Closed
MartinSher opened this Issue Nov 2, 2016 · 16 comments

Comments

Projects
None yet
2 participants
@MartinSher

MartinSher commented Nov 2, 2016

Hi

It appears that if you have an expression with a user defined argument ending in "e" (for example "a + XYZe + 3") the expression parser creates 2 tokens for XYZe ie,. XYZ and e.

This means that you can't have user defined arguments that end with an "e"

Thanks
Martin

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 2, 2016

Owner

Which version of mxparser do you use? I thought the problem was corrected (but maybe this is something different), please refer to "Trailing letter 'e' problem #3" #3

Owner

mariuszgromada commented Nov 2, 2016

Which version of mxparser do you use? I thought the problem was corrected (but maybe this is something different), please refer to "Trailing letter 'e' problem #3" #3

@MartinSher

This comment has been minimized.

Show comment
Hide comment
@MartinSher

MartinSher Nov 2, 2016

Thanks for getting back to me. I downloaded the version from your site
yesterday so I assume that I am using the latest version.

Martin

On Wednesday, 2 November 2016, Mariusz Gromada notifications@github.com
wrote:

Which version of mxparser do you use? I thought the problem was corrected
(but maybe this is something different), please refer to "Trailing letter
'e' problem #3
#3" #3
#3


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksHidC8angLjxxtPpDz7CQrMRrs2wks5q6LYegaJpZM4KnbR4
.

Regards
Martin Sher

Tel: +44 20 8248 4340
Mobile: +44 7816 535 754

MartinSher commented Nov 2, 2016

Thanks for getting back to me. I downloaded the version from your site
yesterday so I assume that I am using the latest version.

Martin

On Wednesday, 2 November 2016, Mariusz Gromada notifications@github.com
wrote:

Which version of mxparser do you use? I thought the problem was corrected
(but maybe this is something different), please refer to "Trailing letter
'e' problem #3
#3" #3
#3


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksHidC8angLjxxtPpDz7CQrMRrs2wks5q6LYegaJpZM4KnbR4
.

Regards
Martin Sher

Tel: +44 20 8248 4340
Mobile: +44 7816 535 754

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 2, 2016

Owner

Hmm. Seems to work on mXparser 3.04

Argument a = new Argument("XYZe = 2");
Expression e = new Expression("1+XYZe",a);
mXparser.consolePrintln("Result = " + e.calculate());

[mXparser-v.3.0.0] Result = 3.0

Are you sure you added argument definition to the expression? Can you pass some code example?

Best regards

Owner

mariuszgromada commented Nov 2, 2016

Hmm. Seems to work on mXparser 3.04

Argument a = new Argument("XYZe = 2");
Expression e = new Expression("1+XYZe",a);
mXparser.consolePrintln("Result = " + e.calculate());

[mXparser-v.3.0.0] Result = 3.0

Are you sure you added argument definition to the expression? Can you pass some code example?

Best regards

@MartinSher

This comment has been minimized.

Show comment
Hide comment
@MartinSher

MartinSher Nov 3, 2016

Mariuz
Thanks
I can confirm that your code above works.
However if I have

Expression e3 = new Expression("ABC + 1 + XYZe");
var tokens = e3.getCopyOfInitialTokens();
mXparser.consolePrintln("Result = " + tokens.Count);

I would get

[mXparser-v.3.0.0] Result = 7.0

because ABC gets split into 2 tokens AB & C and XYZe gets split into XYZ &
e.

I think that I need to get the tokens before defining arguments because I
am reading in a client inputted expression and trying to determine what the
"variables/arguments" are (in this case ABC & XYZe) so that I can go fetch
the values from a database. I then derive a List of argument names
by iterating through the tokens looking for

foreach (var token in tokens)

        {

                if ((token.tokenTypeId == -1) || (token.tokenTypeId ==

101))

                {

                    if (!argumentNames.Contains(token.tokenStr))

                    {

                        argumentNames.Add(token.tokenStr);

                    }

                }

        }

e3.defineArguments(argumentsNames: argumentNames.ToArray());

This seems to work except for some of the tokens being split.

Thanks

Martin

On 2 November 2016 at 22:08, Mariusz Gromada notifications@github.com
wrote:

Hmm. Seems to work on mXparser 3.04

Argument a = new Argument("XYZe = 2");
Expression e = new Expression("1+XYZe",a);
mXparser.consolePrintln("Result = " + e.calculate());

[mXparser-v.3.0.0] Result = 3.0

Are you sure you added argument definition to the expression? Can you pass
some code example?

Best regards


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksJDNblu8Eh6qcv0r5FbgSxpsMPURks5q6QnOgaJpZM4KnbR4
.

Regards
Martin Sher

Tel: +44 20 8248 4340
Mobile: +44 7816 535 754

MartinSher commented Nov 3, 2016

Mariuz
Thanks
I can confirm that your code above works.
However if I have

Expression e3 = new Expression("ABC + 1 + XYZe");
var tokens = e3.getCopyOfInitialTokens();
mXparser.consolePrintln("Result = " + tokens.Count);

I would get

[mXparser-v.3.0.0] Result = 7.0

because ABC gets split into 2 tokens AB & C and XYZe gets split into XYZ &
e.

I think that I need to get the tokens before defining arguments because I
am reading in a client inputted expression and trying to determine what the
"variables/arguments" are (in this case ABC & XYZe) so that I can go fetch
the values from a database. I then derive a List of argument names
by iterating through the tokens looking for

foreach (var token in tokens)

        {

                if ((token.tokenTypeId == -1) || (token.tokenTypeId ==

101))

                {

                    if (!argumentNames.Contains(token.tokenStr))

                    {

                        argumentNames.Add(token.tokenStr);

                    }

                }

        }

e3.defineArguments(argumentsNames: argumentNames.ToArray());

This seems to work except for some of the tokens being split.

Thanks

Martin

On 2 November 2016 at 22:08, Mariusz Gromada notifications@github.com
wrote:

Hmm. Seems to work on mXparser 3.04

Argument a = new Argument("XYZe = 2");
Expression e = new Expression("1+XYZe",a);
mXparser.consolePrintln("Result = " + e.calculate());

[mXparser-v.3.0.0] Result = 3.0

Are you sure you added argument definition to the expression? Can you pass
some code example?

Best regards


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksJDNblu8Eh6qcv0r5FbgSxpsMPURks5q6QnOgaJpZM4KnbR4
.

Regards
Martin Sher

Tel: +44 20 8248 4340
Mobile: +44 7816 535 754

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 3, 2016

Owner

OK - now I understand. I am planning to introduce implicit multiplication meaning tokens abc will be equal a_b_c if names 'a' 'b' 'c' were defined. Currently token 'e' is defined in the parser tokes as Euler constant 'e' = 2.71828.... So the parser see the 'e' and the unknown 'XYZ' (the longest). Implicit multiplication is not yet supported, but the tokenizer was initially prepared for that. What would you suggest here?

Best regards

Owner

mariuszgromada commented Nov 3, 2016

OK - now I understand. I am planning to introduce implicit multiplication meaning tokens abc will be equal a_b_c if names 'a' 'b' 'c' were defined. Currently token 'e' is defined in the parser tokes as Euler constant 'e' = 2.71828.... So the parser see the 'e' and the unknown 'XYZ' (the longest). Implicit multiplication is not yet supported, but the tokenizer was initially prepared for that. What would you suggest here?

Best regards

@MartinSher

This comment has been minimized.

Show comment
Hide comment
@MartinSher

MartinSher Nov 3, 2016

The only options I can think of are
a) Not allowing implicit multiplication which I think would be confusing
anyway
b) have a "aĺlowImplicitMultiplication" option (default = false) in the new
Expression() constructor.

Regards
Martin Sher

T: +44 20 8374 0255
M: +44 7816 535 754

On 3 Nov 2016 07:49, "Mariusz Gromada" notifications@github.com wrote:

OK - now I understand. I am planning to introduce implicit multiplication
meaning tokens abc will be equal a_b_c if names 'a' 'b' 'c' were defined.
Currently token 'e' is defined in the parser tokes as Euler constant 'e' =
2.71828.... So the parser see the 'e' and the unknown 'XYZ' (the longest).
Implicit multiplication is not yet supported, but the tokenizer was
initially prepared for that. What would you suggest here?

Best regards


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksLLwxMktmKUfCkWEhXaHGfX3-Tgsks5q6ZIcgaJpZM4KnbR4
.

MartinSher commented Nov 3, 2016

The only options I can think of are
a) Not allowing implicit multiplication which I think would be confusing
anyway
b) have a "aĺlowImplicitMultiplication" option (default = false) in the new
Expression() constructor.

Regards
Martin Sher

T: +44 20 8374 0255
M: +44 7816 535 754

On 3 Nov 2016 07:49, "Mariusz Gromada" notifications@github.com wrote:

OK - now I understand. I am planning to introduce implicit multiplication
meaning tokens abc will be equal a_b_c if names 'a' 'b' 'c' were defined.
Currently token 'e' is defined in the parser tokes as Euler constant 'e' =
2.71828.... So the parser see the 'e' and the unknown 'XYZ' (the longest).
Implicit multiplication is not yet supported, but the tokenizer was
initially prepared for that. What would you suggest here?

Best regards


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksLLwxMktmKUfCkWEhXaHGfX3-Tgsks5q6ZIcgaJpZM4KnbR4
.

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 3, 2016

Owner

This seams to be reasonable. I need to rethink tokenizer code for that. Thanks

Owner

mariuszgromada commented Nov 3, 2016

This seams to be reasonable. I need to rethink tokenizer code for that. Thanks

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 3, 2016

Owner

You know the database structure, so you know the possible arguments names - It means you can define it before you ask user for expression string. It will result in faster tokenization I think. But you might have a conflicts with built-int parser tokens.

Owner

mariuszgromada commented Nov 3, 2016

You know the database structure, so you know the possible arguments names - It means you can define it before you ask user for expression string. It will result in faster tokenization I think. But you might have a conflicts with built-int parser tokens.

@MartinSher

This comment has been minimized.

Show comment
Hide comment
@MartinSher

MartinSher Nov 4, 2016

Mariusz

The database can have lots (thousands) of dictionary items so does not
make sense to add each one as a possible argument to each expression.
Preferable to determine the list of possible argumetn by getting the
tokens and then add arguments as rquired.

Regards
Martin Sher

M: +44 7816 535 754

On 03/11/2016 20:21, Mariusz Gromada wrote:

You know the database structure, so you know the possible arguments
names - It means you can define it before you ask user for expression
string. It will result in faster tokenization I think.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksBOoHGk7j-TrGSrifDA5vNI2LfJOks5q6kJNgaJpZM4KnbR4.

MartinSher commented Nov 4, 2016

Mariusz

The database can have lots (thousands) of dictionary items so does not
make sense to add each one as a possible argument to each expression.
Preferable to determine the list of possible argumetn by getting the
tokens and then add arguments as rquired.

Regards
Martin Sher

M: +44 7816 535 754

On 03/11/2016 20:21, Mariusz Gromada wrote:

You know the database structure, so you know the possible arguments
names - It means you can define it before you ask user for expression
string. It will result in faster tokenization I think.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksBOoHGk7j-TrGSrifDA5vNI2LfJOks5q6kJNgaJpZM4KnbR4.

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 4, 2016

Owner

Dear Martin,

Your use case is very interesting and I think it would be beneficial to you and for the functionality of mXparser to extend the API to more easily support you solution. I hope you will be able to help me with that :-)

Kind regards

Owner

mariuszgromada commented Nov 4, 2016

Dear Martin,

Your use case is very interesting and I think it would be beneficial to you and for the functionality of mXparser to extend the API to more easily support you solution. I hope you will be able to help me with that :-)

Kind regards

@MartinSher

This comment has been minimized.

Show comment
Hide comment
@MartinSher

MartinSher Nov 4, 2016

sure

Regards
Martin Sher

M: +44 7816 535 754

On 04/11/2016 14:12, Mariusz Gromada wrote:

Dear Martin,

Your use case is very interesting and I think it would be beneficial
to you and for the functionality of mXparser to extend the API to more
easily support you solution. I hope you will be able to help me with
that :-)

Kind regards


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksGBuRCM7mn0G5-ORWXEX1gpyciAIks5q6z1jgaJpZM4KnbR4.

MartinSher commented Nov 4, 2016

sure

Regards
Martin Sher

M: +44 7816 535 754

On 04/11/2016 14:12, Mariusz Gromada wrote:

Dear Martin,

Your use case is very interesting and I think it would be beneficial
to you and for the functionality of mXparser to extend the API to more
easily support you solution. I hope you will be able to help me with
that :-)

Kind regards


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#10 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQpksGBuRCM7mn0G5-ORWXEX1gpyciAIks5q6z1jgaJpZM4KnbR4.

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 4, 2016

Owner

Great. Currently parser has a lot of predefined tokens than can also exist in the database. I think you should have an option to define priority of the token (if conflict appears) or even have the construction that includes very limited predefined list of tokens.

Additionally you are using tokens list - I decided to share tokens list via API thinking on possible syntax coloring :-) But you have totally different need...

Owner

mariuszgromada commented Nov 4, 2016

Great. Currently parser has a lot of predefined tokens than can also exist in the database. I think you should have an option to define priority of the token (if conflict appears) or even have the construction that includes very limited predefined list of tokens.

Additionally you are using tokens list - I decided to share tokens list via API thinking on possible syntax coloring :-) But you have totally different need...

@MartinSher

This comment has been minimized.

Show comment
Hide comment
@MartinSher

MartinSher Nov 4, 2016

Very useful to have access to standard tokens such as e, pi etc
Options are to have user created arguments and constants override system arguments and constants. Alternative throw a checkStatus error if user tries to define constant or argument that clashes with pre-defined ones.

MartinSher commented Nov 4, 2016

Very useful to have access to standard tokens such as e, pi etc
Options are to have user created arguments and constants override system arguments and constants. Alternative throw a checkStatus error if user tries to define constant or argument that clashes with pre-defined ones.

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Nov 4, 2016

Owner

this already works - check syntax will return duplicate token error.

Owner

mariuszgromada commented Nov 4, 2016

this already works - check syntax will return duplicate token error.

@mariuszgromada mariuszgromada added the bug label Nov 4, 2016

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Mar 19, 2017

Owner

This problem was corrected, will be released in v.4.0

Owner

mariuszgromada commented Mar 19, 2017

This problem was corrected, will be released in v.4.0

@mariuszgromada

This comment has been minimized.

Show comment
Hide comment
@mariuszgromada

mariuszgromada Mar 19, 2017

Owner

Fixed and committed.

Owner

mariuszgromada commented Mar 19, 2017

Fixed and committed.

mariuszgromada added a commit that referenced this issue Mar 26, 2017

v.4.0: Major update - release
v.4.0.0 (2017-03-27): Major update
- Bitwise Operators
- Numbers in scientific notation
- Units, Physical & Astronomical Constants,
- Equations solving via finding function root
- Better tokens handling
- Function Extensions - possibility of using your own implementation
- Bugs fixed

* Bitwise Operators

- @~   Bitwise unary complement
- @&   Bitwise AND
- @^   Bitwise exclusive OR
- @|   Bitwise inclusive OR
- @<<  Signed left shift
- @>>  Signed right shift

* Numbers in scientific notation

- 1.2e10
- 1.2e-10
- 1.2e+10
- 1.2E10
- 1.2E-10
- 1.2E+10
- ...

* Units

- [%]   <Ratio, Fraction> Percentage = 0.01
- [%%]   <Ratio, Fraction> Promil, Per mille = 0.001
- [Y]   <Metric prefix> Septillion / Yotta = 10^24
- [sept]  <Metric prefix> Septillion / Yotta = 10^24
- [Z]   <Metric prefix> Sextillion / Zetta = 10^21
- [sext]  <Metric prefix> Sextillion / Zetta = 10^21
- [E]   <Metric prefix> Quintillion / Exa = 10^18
- [quint]  <Metric prefix> Quintillion / Exa = 10^18
- [P]   <Metric prefix> Quadrillion / Peta = 10^15
- [quad]  <Metric prefix> Quadrillion / Peta = 10^15
- [T]   <Metric prefix> Trillion / Tera = 10^12
- [tril]  <Metric prefix> Trillion / Tera = 10^12
- [G]   <Metric prefix> Billion / Giga = 10^9
- [bil]   <Metric prefix> Billion / Giga = 10^9
- [M]   <Metric prefix> Million / Mega = 10^6
- [mil]   <Metric prefix> Million / Mega = 10^6
- [k]   <Metric prefix> Thousand / Kilo = 10^3
- [th]   <Metric prefix> Thousand / Kilo = 10^3
- [hecto]  <Metric prefix> Hundred / Hecto = 10^2
- [hund]  <Metric prefix> Hundred / Hecto = 10^2
- [deca]  <Metric prefix> Ten / Deca = 10
- [ten]   <Metric prefix> Ten / Deca = 10
- [deci]  <Metric prefix> Tenth / Deci = 0.1
- [centi]  <Metric prefix> Hundredth / Centi = 0.01
- [milli]  <Metric prefix> Thousandth / Milli = 0.001
- [mic]   <Metric prefix> Millionth / Micro = 10^-6
- [n]   <Metric prefix> Billionth / Nano = 10^-9
- [p]   <Metric prefix> Trillionth / Pico = 10^-12
- [f]   <Metric prefix> Quadrillionth / Femto = 10^-15
- [a]   <Metric prefix> Quintillionth / Atoo = 10^-18
- [z]   <Metric prefix> Sextillionth / Zepto = 10^-21
- [y]   <Metric prefix> Septillionth / Yocto = 10^-24
- [m]   <Unit of length> Metre / Meter (m=1)
- [km]   <Unit of length> Kilometre / Kilometer (m=1)
- [cm]   <Unit of length> Centimetre / Centimeter (m=1)
- [mm]   <Unit of length> Millimetre / Millimeter (m=1)
- [inch]  <Unit of length> Inch (m=1)
- [yd]   <Unit of length> Yard (m=1)
- [ft]   <Unit of length> Feet (m=1)
- [mile]  <Unit of length> Mile (m=1)
- [nmi]   <Unit of length> Nautical mile (m=1)
- [m2]   <Unit of area> Square metre / Square meter (m=
- [cm2]   <Unit of area> Square centimetre / Square cent
- [mm2]   <Unit of area> Square millimetre / Square mill
- [are]   <Unit of area> Are (m=1)
- [ha]   <Unit of area> Hectare (m=1)
- [acre]  <Unit of area> Acre (m=1)
- [km2]   <Unit of area> Square kilometre / Square kilom
- [mm3]   <Unit of volume> Cubic millimetre / Cubic mill
- [cm3]   <Unit of volume> Cubic centimetre / Cubic cent
- [m3]   <Unit of volume> Cubic metre / Cubic meter (m=
- [km3]   <Unit of volume> Cubic kilometre / Cubic kilom
- [ml]   <Unit of volume> Millilitre / Milliliter (m=1)
- [l]   <Unit of volume> Litre / Liter (m=1)
- [gall]  <Unit of volume> Gallon (m=1)
- [pint]  <Unit of volume> Pint (m=1)
- [s]   <Unit of time> Second (s=1)
- [ms]   <Unit of time> Millisecond (s=1)
- [min]   <Unit of time> Minute (s=1)
- [h]   <Unit of time> Hour (s=1)
- [day]   <Unit of time> Day (s=1)
- [week]  <Unit of time> Week (s=1)
- [yearj]  <Unit of time> Julian year = 365.25 days (s=1)
- [kg]   <Unit of mass> Kilogram (kg=1)
- [gr]   <Unit of mass> Gram (kg=1)
- [mg]   <Unit of mass> Milligram (kg=1)
- [dag]   <Unit of mass> Decagram (kg=1)
- [t]   <Unit of mass> Tonne (kg=1)
- [oz]   <Unit of mass> Ounce (kg=1)
- [lb]   <Unit of mass> Pound (kg=1)
- [b]   <Unit of information> Bit (bit=1)
- [kb]   <Unit of information> Kilobit (bit=1)
- [Mb]   <Unit of information> Megabit (bit=1)
- [Gb]   <Unit of information> Gigabit (bit=1)
- [Tb]   <Unit of information> Terabit (bit=1)
- [Pb]   <Unit of information> Petabit (bit=1)
- [Eb]   <Unit of information> Exabit (bit=1)
- [Zb]   <Unit of information> Zettabit (bit=1)
- [Yb]   <Unit of information> Yottabit (bit=1)
- [B]   <Unit of information> Byte (bit=1)
- [kB]   <Unit of information> Kilobyte (bit=1)
- [MB]   <Unit of information> Megabyte (bit=1)
- [GB]   <Unit of information> Gigabyte (bit=1)
- [TB]   <Unit of information> Terabyte (bit=1)
- [PB]   <Unit of information> Petabyte (bit=1)
- [EB]   <Unit of information> Exabyte (bit=1)
- [ZB]   <Unit of information> Zettabyte (bit=1)
- [YB]   <Unit of information> Yottabyte (bit=1)
- [J]   <Unit of energy> Joule (m=1, kg=1, s=1)
- [eV]   <Unit of energy> Electronovolt (m=1, kg=1, s=1
- [keV]   <Unit of energy> Kiloelectronovolt (m=1, kg=1,
- [MeV]   <Unit of energy> Megaelectronovolt (m=1, kg=1,
- [GeV]   <Unit of energy> Gigaelectronovolt (m=1, kg=1,
- [TeV]   <Unit of energy> Teraelectronovolt (m=1, kg=1,
- [m/s]   <Unit of speed> Metre / Meter per second (m=1,
- [km/h]  <Unit of speed> Kilometre / Kilometer per hour
- [mi/h]  <Unit of speed> Mile per hour (m=1, s=1)
- [knot]  <Unit of speed> Knot (m=1, s=1)
- [m/s2]  <Unit of acceleration> Metre / Meter per squar
- [km/h2]  <Unit of acceleration> Kilometre / Kilometer p
- [mi/h2]  <Unit of acceleration> Mile per square hour (m
- [rad]   <Unit of angle> Radian (rad=1)
- [deg]   <Unit of angle> Degree of arc (rad=1)
- [']   <Unit of angle> Minute of arc (rad=1)
- ['']   <Unit of angle> Second of arc (rad=1)

* Physical Constants

- [c]  Light speed in vacuum [m/s] (m=1, s=1)
- [G.]  Gravitational constant (m=1, kg=1, s=1)]
- [g]  Gravitational acceleration on Earth [m/s^2] (m=1, s=1)
- [hP]  Planck constant (m=1, kg=1, s=1)
- [h-]  Reduced Planck constant / Dirac constant (m=1, kg=1, s=1)]
- [lP]  Planck length [m] (m=1)
- [mP]  Planck mass [kg] (kg=1)
- [tP]  Planck time [s] (s=1)

* Astronomical Constants

- [ly]    Light year [m] (m=1)
- [au]    Astronomical unit [m] (m=1)
- [pc]    Parsec [m] (m=1)
- [kpc]    Kiloparsec [m] (m=1)
- [Earth-R-eq]  Earth equatorial radius [m] (m=1)
- [Earth-R-po]  Earth polar radius [m] (m=1)
- [Earth-R]   Earth mean radius (m=1)
- [Earth-M]   Earth mass [kg] (kg=1)
- [Earth-D]   Earth-Sun distance - semi major axis [m] (m=1)
- [Moon-R]   Moon mean radius [m] (m=1)
- [Moon-M]   Moon mass [kg] (kg=1)
- [Moon-D]   Moon-Earth distance - semi major axis [m] (m=1)
- [Solar-R]   Solar mean radius [m] (m=1)
- [Solar-M]   Solar mass [kg] (kg=1)
- [Mercury-R]  Mercury mean radius [m] (m=1)
- [Mercury-M]  Mercury mass [kg] (kg=1)
- [Mercury-D]  Mercury-Sun distance - semi major axis [m] (m=1)
- [Venus-R]   Venus mean radius [m] (m=1)
- [Venus-M]   Venus mass [kg] (kg=1)
- [Venus-D]   Venus-Sun distance - semi major axis [m] (m=1)
- [Mars-R]   Mars mean radius [m] (m=1)
- [Mars-M]   Mars mass [kg] (kg=1)
- [Mars-D]   Mars-Sun distance - semi major axis [m] (m=1)
- [Jupiter-R]  Jupiter mean radius [m] (m=1)
- [Jupiter-M]  Jupiter mass [kg] (kg=1)
- [Jupiter-D]  Jupiter-Sun distance - semi major axis [m] (m=1)
- [Saturn-R]  Saturn mean radius [m] (m=1)
- [Saturn-M]  Saturn mass [kg] (kg=1)
- [Saturn-D]  Saturn-Sun distance - semi major axis [m] (m=1)
- [Uranus-R]  Uranus mean radius [m] (m=1)
- [Uranus-M]  Uranus mass [kg] (kg=1)
- [Uranus-D]  Uranus-Sun distance - semi major axis [m] (m=1)
- [Neptune-R]  Neptune mean radius [m] (m=1)
- [Neptune-M]  Neptune mass [kg] (kg=1)
- [Neptune-D]  Neptune-Sun distance - semi major axis [m] (m=1)

* Equations solving via finding function root

- solve( f(x), x, a, b ) - solving f(x) = 0

* Function Extensions

- FileExtension interface + new constructor in Function class

* Better tokens handling

- Better handling of invalid / not known tokens
- Looks like functionality

* Bugs fixed

- Exception thrown by getCopyOfInitialTokens() #21
- System.format.exception - system.IO.EndOfStreamException #20
- Expression relating factorial "!" cause the application to hang #17
- Negative sign missing when is right of operators #16
- Negative in if statement #12
- Speed when debugging #11
- User defined arguments ending in e #10

* New regression tests - current tests coverage:

- 622 expression related tests
- 114 syntax related tests
- 30 api related tests
- 20 performance tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment