MainClass
This commit is contained in:
parent
eed8d26712
commit
f27939ee67
@ -1,16 +1,5 @@
|
||||
public static class Calculator
|
||||
{
|
||||
public static void Main(string[] args){
|
||||
string() joined = "";
|
||||
foreach(string arg in args){
|
||||
joined += arg;
|
||||
}
|
||||
double rezult = Calculate(joined);
|
||||
Console.WriteLine(rezult);
|
||||
}
|
||||
|
||||
public static double Calculate(string exprStr)
|
||||
{
|
||||
public static class Calculator {
|
||||
public static double Calculate(string exprStr) {
|
||||
Lexer() lexer;
|
||||
List<Token()> tokens = lexer.Lex(exprStr);
|
||||
// lexer.PrintTokens();
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
abstract class FunctionCallExpression : IExpression
|
||||
{
|
||||
abstract class FunctionCallExpression : IExpression {
|
||||
IExpression X;
|
||||
|
||||
internal void Init!(IExpression x){
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
abstract class IExpression
|
||||
{
|
||||
abstract class IExpression {
|
||||
internal abstract double Calculate();
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
class NumericExpression : IExpression
|
||||
{
|
||||
class NumericExpression : IExpression {
|
||||
double N;
|
||||
|
||||
internal void Init!(double n){
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
abstract class OperatorExpression : IExpression
|
||||
{
|
||||
abstract class OperatorExpression : IExpression {
|
||||
IExpression A;
|
||||
IExpression B;
|
||||
|
||||
|
||||
19
src/Lexer.fu
19
src/Lexer.fu
@ -1,7 +1,5 @@
|
||||
class Lexer
|
||||
{
|
||||
class Lexer {
|
||||
string ExprStr;
|
||||
|
||||
List<Token()>() TokenStorage;
|
||||
int tokType = Token.Type_Number;
|
||||
int tokBegin = 0;
|
||||
@ -39,10 +37,8 @@ class Lexer
|
||||
internal List<Token()> Lex!(string exprStr){
|
||||
ExprStr = exprStr;
|
||||
|
||||
while (i < ExprStr.Length)
|
||||
{
|
||||
switch (ExprStr[i])
|
||||
{
|
||||
while (i < ExprStr.Length) {
|
||||
switch (ExprStr[i]) {
|
||||
// end token, add new predifined token and move next
|
||||
case '(': AddStaticToken(TokBracketOpen); break;
|
||||
case ')': AddStaticToken(TokBracketClose); break;
|
||||
@ -75,10 +71,8 @@ class Lexer
|
||||
return TokenStorage;
|
||||
}
|
||||
|
||||
void TryEndToken!()
|
||||
{
|
||||
if (tokBegin != i)
|
||||
{
|
||||
void TryEndToken!() {
|
||||
if (tokBegin != i) {
|
||||
Token() tok = Token.Create(ExprStr, tokBegin, i - tokBegin, tokType);
|
||||
TokenStorage.Add();
|
||||
TokenStorage[TokenStorage.Count-1] = tok;
|
||||
@ -87,8 +81,7 @@ class Lexer
|
||||
}
|
||||
}
|
||||
|
||||
void AddStaticToken!(Token() tok)
|
||||
{
|
||||
void AddStaticToken!(Token() tok) {
|
||||
TryEndToken();
|
||||
TokenStorage.Add();
|
||||
TokenStorage[TokenStorage.Count-1] = tok;
|
||||
|
||||
15
src/MainClass.fu
Normal file
15
src/MainClass.fu
Normal file
@ -0,0 +1,15 @@
|
||||
public static class MainClass {
|
||||
public static void Main(string[] args){
|
||||
#if CS
|
||||
native {
|
||||
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
|
||||
}
|
||||
#endif
|
||||
string() joined = "";
|
||||
foreach(string arg in args){
|
||||
joined += arg;
|
||||
}
|
||||
double rezult = Calculator.Calculate(joined);
|
||||
Console.WriteLine(rezult);
|
||||
}
|
||||
}
|
||||
@ -1,19 +1,18 @@
|
||||
class Parser
|
||||
{
|
||||
class Parser {
|
||||
List<Token()> TokenStorage;
|
||||
IExpression# RootExpression;
|
||||
TokenLinkedList() TokensInRPN;
|
||||
Token() TokZero;
|
||||
|
||||
internal Parser(){
|
||||
NumericExpression# nan = new NumericExpression();
|
||||
nan.Init(Math.NaN);
|
||||
RootExpression = nan;
|
||||
RootExpression = new NumericExpression(); // NaN
|
||||
TokZero = Token.Create("0", 0, 1, Token.Type_Number);
|
||||
}
|
||||
|
||||
internal IExpression# Parse!(List<Token()> tokens){
|
||||
TokenStorage = tokens;
|
||||
if(tokens.Count == 0)
|
||||
return RootExpression; // NaN
|
||||
SortTokensInRPN();
|
||||
BuildExpressionTree();
|
||||
return RootExpression;
|
||||
@ -133,6 +132,7 @@ class Parser
|
||||
|
||||
if(expressionStack.Count == 1)
|
||||
RootExpression = expressionStack.Pop();
|
||||
else RootExpression = new NumericExpression(); // NaN
|
||||
}
|
||||
|
||||
// returns the number or NaN
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
class Token
|
||||
{
|
||||
class Token {
|
||||
string Str;
|
||||
int StartIndex;
|
||||
int Length;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user