Arithmetic evaluation: Difference between revisions
m
→{{header|Elena}}
(Added FutureBasic solution) |
|||
Line 1,313:
=={{header|Elena}}==
ELENA
<syntaxhighlight lang="elena">
import system'routines;
import extensions;
import extensions'text;
// --- Token ---
class Token
{
}
// --- Node ---
class Node
{
}
// --- SummaryNode
class SummaryNode : Node
{
}
// --- DifferenceNode ---
class DifferenceNode : Node
{
}
// --- ProductNode ---
class ProductNode : Node
{
}
// --- FractionNode ---
class FractionNode : Node
{
}
// --- Expression ---
class Expression
{
object Right
}
// --- States ---
singleton operatorState
{
^ weak
^ weak
}
singleton tokenState
{
^ weak
^ weak
^ weak
^ weak
^ weak
^ weak
}
singleton startState
{
^ weak
^ weak
^ weak
}
// --- Scope ---
class Scope
{
}
// ---- Parser ----
class Parser
{
var
expression.Top := self.append(/*expression.Top*/t, SummaryNode.new(level))
}
expression.Top := self.append(expression.Top, DifferenceNode.new(level))
}
expression.Top := self.append(expression.Top, ProductNode.new(level))
}
expression.Top := self.append(expression.Top, FractionNode.new(level))
}
expression.Top := self.append(expression.Top, Expression.new(level))
}
append(object lastNode, object newNode)
{
if(nil == lastNode)
if (newNode.Level <= lastNode.Level)
var parent := lastNode;
while (nil != current && newNode.Level > current.Level)
if (nil
{
else
{
newNode.Left := current; parent.Right := newNode
^ lastNode
run(text)
{
var scope
^ scope.Number
}
}
public program()
{
//console.writeLine:"Invalid Expression"
text.clear()
}
}</syntaxhighlight>
|