Functional-lang  0.0
An example functional programming language
Public Member Functions | List of all members
IdExpr Class Reference

Identifier expression. More...

#include <syntax.hpp>

Inheritance diagram for IdExpr:
Expr GCObj

Public Member Functions

 IdExpr (GCMain &gc, const TokenPos &pos, const std::string &id)
 
const std::string & getName () const noexcept
 
virtual std::string toString () const noexcept override
 
virtual Expr * eval (GCMain &gc, Environment &env) noexcept override
 Evaluates expression one time. More...
 
virtual Expr * replace (GCMain &gc, const std::string &name, Expr *expr) const noexcept override
 Replace all identifiers equal to name with expr. More...
 
virtual bool equals (const Expr *expr, bool exact=false) const noexcept override
 Checks if this expression and expr have the same structure, Every expression has the same structure as '_' (it's called ANY after all). More...
 
virtual std::vector< std::string > getIdentifiers () const noexcept override
 
- Public Member Functions inherited from Expr
 Expr (GCMain &gc, ExprType type, const TokenPos &pos)
 
std::size_t getDepth () const noexcept
 
bool hasLastEval () const noexcept
 
const TokenPos & getTokenPos () const noexcept
 
ExprType getExpressionType () const noexcept
 
Expr * evalWithLookup (GCMain &gc, Environment &env) noexcept
 
virtual void mark (GCMain &gc) noexcept override
 If not marked mark itself and children.
 
virtual Expr * optimize (GCMain &gc) noexcept
 
- Public Member Functions inherited from GCObj
 GCObj (GCMain &main) noexcept
 Initialize as not marked.
 
virtual bool isMarked (GCMain &main) const noexcept
 

Additional Inherited Members

- Protected Member Functions inherited from GCObj
virtual void markSelf (GCMain &main)
 Marks itself.
 
- Protected Attributes inherited from Expr
std::size_t depth
 
Expr * lastEval = nullptr
 

Detailed Description

Identifier expression.

Member Function Documentation

◆ equals()

virtual bool IdExpr::equals ( const Expr *  expr,
bool  exact = false 
) const
overridevirtualnoexcept

Checks if this expression and expr have the same structure, Every expression has the same structure as '_' (it's called ANY after all).

Parameters
exprThe expression to compare to this.
exactIf true any must equal any and nothing else. Otherwise any is equal to anyting else.

Reimplemented from Expr.

◆ eval()

virtual Expr* IdExpr::eval ( GCMain &  gc,
Environment &  env 
)
overridevirtualnoexcept

Evaluates expression one time.

Parameters
gc
envEnvironment for accessing variables.
Returns
Returns itself if nothing evaluated, otherwise a new expression.

Reimplemented from Expr.

◆ getIdentifiers()

virtual std::vector<std::string> IdExpr::getIdentifiers ( ) const
inlineoverridevirtualnoexcept
Returns
Returns all identifiers used in expression.

Reimplemented from Expr.

◆ replace()

virtual Expr* IdExpr::replace ( GCMain &  gc,
const std::string &  name,
Expr *  expr 
) const
overridevirtualnoexcept

Replace all identifiers equal to name with expr.

Parameters
gc
nameIdentifer name to replace. If name is empty, every identifier will be replaced by AnyExpr(expr_any).
exprThe expression to replaces identifiers.
Returns
Returns new expression, where matching identifiers are replaced. Returns itself if not possible (expression can't contain any identifiers) or if expression is a lambda function, where the <id> is equal to name.

Reimplemented from Expr.

◆ toString()

virtual std::string IdExpr::toString ( ) const
inlineoverridevirtualnoexcept
Returns
Returns expression in functional-lang (the programming language to parse).

Reimplemented from Expr.


The documentation for this class was generated from the following file: