Parses Fabrique files as driven by flex/byacc. More...
#include <Parser.h>
Public Member Functions | |
Parser (TypeContext &, plugin::Registry &, plugin::Loader &, std::string srcroot) | |
const Type & | ParseDefinitions (const std::vector< std::string > &defs) |
Parse Fabrique fragments defined at, e.g., the command line. | |
std::unique_ptr< Scope > | ParseFile (std::istream &input, const Type &arguments, std::string name="", StringMap< std::string > builtins=StringMap< std::string >(), SourceRange openedFrom=SourceRange::None()) |
Parse Fabrique input (usually a file) into a Scope. | |
const UniqPtrVec< ErrorReport > & | errors () const |
Errors encountered during parsing. | |
const std::vector< std::string > & | files () const |
Input files encountered during parsing. | |
Scope & | EnterScope (const std::string &name, const Type &argumentsType, SourceRange src=SourceRange::None()) |
Enter an AST Scope. More... | |
Scope & | EnterScope (const std::string &name) |
A convenience wrapper around EnterScope with no 'args' type. | |
Scope & | EnterScope (Scope &&s) |
Take an AST Scope and push it on the stack. | |
const Type & | getType (const std::string &name, const SourceRange &begin, const SourceRange &end, const PtrVec< Type > ¶ms=PtrVec< Type >()) |
Find or create a Type. | |
const Type & | getType (UniqPtr< Identifier > &&, UniqPtr< const PtrVec< Type >> &¶ms=nullptr) |
const FunctionType & | FnType (const PtrVec< Type > &inputs, const Type &output, SourceRange) |
const StructureType * | StructType (UniqPtr< UniqPtrVec< Identifier >> &fields, SourceRange) |
Action * | DefineAction (UniqPtr< UniqPtrVec< Argument >> &args, const SourceRange &, UniqPtr< UniqPtrVec< Parameter >> &¶ms=nullptr) |
Define a build Action. | |
Argument * | Arg (UniqPtr< Expression > &value, UniqPtr< Identifier > &&=nullptr) |
Parse an Argument to a Function, build Action, etc. | |
BinaryOperation * | BinaryOp (BinaryOperation::Operator, UniqPtr< Expression > &, UniqPtr< Expression > &) |
Create a BinaryOperation (+, ::, ...). | |
Call * | CreateCall (UniqPtr< Expression > &, UniqPtr< UniqPtrVec< Argument >> &, const SourceRange &end) |
A call to an Action or Function. | |
CompoundExpression * | CompoundExpr (UniqPtr< Expression > &result, SourceRange beg=SourceRange::None(), SourceRange end=SourceRange::None()) |
An expression that can (optionally) include intermediate values. | |
FieldAccess * | FieldAccess (UniqPtr< Expression > &structure, UniqPtr< Identifier > &field) |
An expression that indirects into a structure. | |
FieldQuery * | FieldQuery (UniqPtr< Expression > &structure, UniqPtr< Identifier > &field, UniqPtr< Expression > &defaultValue, SourceRange) |
A test to see if a structure contains a field. | |
Filename * | File (UniqPtr< Expression > &name, const SourceRange &src, UniqPtr< UniqPtrVec< Argument >> &&arguments=nullptr) |
A Filename that is part of the build DAG. | |
FileList * | Files (const SourceRange &, UniqPtr< UniqPtrVec< Filename >> &, UniqPtr< UniqPtrVec< Argument >> &&args=nullptr) |
Create a list of files, which may have shared arguments. More... | |
ForeachExpr * | Foreach (UniqPtr< Mapping > &, UniqPtr< Expression > &body, const SourceRange &start) |
An expression for mapping list elements into another list: foreach x in some_list: x + 1. | |
Function * | DefineFunction (const SourceRange &begin, UniqPtr< UniqPtrVec< Parameter >> ¶ms, UniqPtr< Expression > &body, const Type *ty=nullptr) |
Identifier * | Id (UniqPtr< Token > &&) |
An untyped ast::Identifier: just a name. | |
Identifier * | Id (UniqPtr< Identifier > &&untyped, const Type *) |
A typed ast::Identifier. | |
Import * | ImportModule (UniqPtr< StringLiteral > &name, UniqPtrVec< Argument > &arguments, SourceRange) |
An expression that imports a Fabrique module. | |
Conditional * | IfElse (const SourceRange &ifLocation, UniqPtr< Expression > &condition, UniqPtr< Expression > &thenResult, UniqPtr< Expression > &elseResult) |
A conditional if-then-else expression (not a statement, an expression). More... | |
List * | ListOf (UniqPtrVec< Expression > &, const SourceRange &) |
Define a List of expressions. | |
Mapping * | Map (UniqPtr< Expression > &source, UniqPtr< Identifier > &target) |
Define a mapping from a sequence to a name. | |
SomeValue * | Some (UniqPtr< Expression > &, SourceRange) |
Create a SomeValue (populated maybe object). | |
StructInstantiation * | StructInstantiation (SourceRange) |
Turn the current scope into a structure instantiation. | |
BoolLiteral * | True () |
BoolLiteral * | False () |
IntLiteral * | ParseInt (int) |
StringLiteral * | ParseString (UniqPtr< Token > &&) |
Parameter * | Param (UniqPtr< Identifier > &&name, UniqPtr< Expression > &&defaultValue=nullptr) |
Parse a function Parameter. | |
SymbolReference * | Reference (UniqPtr< Identifier > &&) |
Reference a Value in scope. | |
SymbolReference * | Reference (UniqPtr< class FieldAccess > &&) |
DebugTracePoint * | TracePoint (UniqPtr< Expression > &, SourceRange) |
Create a DebugTracePoint. | |
UnaryOperation * | UnaryOp (UnaryOperation::Operator, const SourceRange &operatorLocation, UniqPtr< Expression > &) |
Create a UnaryOperation (currently just 'not'). | |
bool | DefineValue (UniqPtr< Identifier > &, UniqPtr< Expression > &, bool builtin=false) |
Define a Value in the current scope. | |
bool | DefineValue (UniqPtr< Expression > &) |
Define an unnamed Value in the current scope. | |
Static Public Member Functions | |
static Token * | ParseToken (YYSTYPE &) |
static bool | Set (YYSTYPE &, Node *) |
Scope & Parser::EnterScope | ( | const std::string & | name, |
const Type & | argumentsType, | ||
SourceRange | src = SourceRange::None() |
||
) |
Enter an AST Scope.
Should be called before parsing anything that belongs in the scope, e.g. parameters:
[EnterScope] function (x:int [Parameter]) { ... } [ExitScope]
name | a name used to describe the scope (for debugging) |
argumentsType | the type of the arguments (if any) being passed into the scope: either a StructureType or else TypeContext::nilType() |
src | the entire extent of the scope in source |
Definition at line 183 of file Parser.cc.
References fabrique::Bytestream::Debug().
FileList * Parser::Files | ( | const SourceRange & | begin, |
UniqPtr< UniqPtrVec< Filename >> & | files, | ||
UniqPtr< UniqPtrVec< Argument >> && | args = nullptr |
||
) |
Conditional * Parser::IfElse | ( | const SourceRange & | ifLocation, |
UniqPtr< Expression > & | condition, | ||
UniqPtr< Expression > & | thenResult, | ||
UniqPtr< Expression > & | elseResult | ||
) |
A conditional if-then-else expression (not a statement, an expression).
The expression (if condition foo else bar) evaluates to either foo or bar, depending on condition. It can also be writen as:
if (condition) foo else bar
Definition at line 679 of file Parser.cc.
References fabrique::SourceRange::Over().