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().