xo-reader: prefer xo::bp spelling to xo::ref::brw
This commit is contained in:
parent
97ff0e13a6
commit
d1473f0405
26 changed files with 152 additions and 47 deletions
|
|
@ -79,9 +79,9 @@ namespace xo {
|
|||
|
||||
defexprstatetype defxs_type() const { return defxs_type_; }
|
||||
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_expr_with_semicolon(ref::brw<Expression> expr,
|
||||
virtual void on_expr_with_semicolon(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_symbol(const std::string & symbol_name,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
|
|
|||
|
|
@ -25,11 +25,14 @@ namespace xo {
|
|||
|
||||
const std::vector<rp<Variable>> & argl() const { return argl_; }
|
||||
|
||||
/** lookup variable by name. If found, return it.
|
||||
/** lookup variable by @p name. If found, return it.
|
||||
* Otherwise return nullptr
|
||||
**/
|
||||
rp<Variable> lookup(const std::string & name) const;
|
||||
|
||||
/** establish (replacing if already exists) binding for variable @p var **/
|
||||
void upsert(bp<Variable> var);
|
||||
|
||||
void print (std::ostream & os) const;
|
||||
|
||||
private:
|
||||
|
|
@ -44,5 +47,4 @@ namespace xo {
|
|||
} /*namespace scm*/
|
||||
} /*namespace xo*/
|
||||
|
||||
|
||||
/* end envframe.hpp */
|
||||
|
|
|
|||
|
|
@ -28,6 +28,11 @@ namespace xo {
|
|||
**/
|
||||
rp<Variable> lookup(const std::string & x) const;
|
||||
|
||||
/** update/replace binding for variable @p target.
|
||||
* New binding may have a different type.
|
||||
**/
|
||||
void upsert(bp<Variable> target);
|
||||
|
||||
envframe & top_envframe();
|
||||
void push_envframe(envframe x);
|
||||
void pop_envframe();
|
||||
|
|
|
|||
|
|
@ -48,12 +48,12 @@ namespace xo {
|
|||
parserstatemachine * p_psm) override;
|
||||
|
||||
/** update exprstate in response to a successfully-parsed subexpression **/
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
/** update exprstate in response to a successfully-parsed subexpression,
|
||||
* that's terminated by semicolon ';'
|
||||
**/
|
||||
virtual void on_expr_with_semicolon(ref::brw<Expression> expr,
|
||||
virtual void on_expr_with_semicolon(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -56,9 +56,9 @@ namespace xo {
|
|||
|
||||
virtual void on_typedescr(TypeDescr td,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_expr_with_semicolon(ref::brw<Expression> expr,
|
||||
virtual void on_expr_with_semicolon(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -106,11 +106,11 @@ namespace xo {
|
|||
parserstatemachine * p_psm);
|
||||
|
||||
/** update exprstate in response to a successfully-parsed subexpression **/
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm);
|
||||
|
||||
/** update exprstate in response to a successfully-parsed subexpression, that ends with semicolon **/
|
||||
virtual void on_expr_with_semicolon(ref::brw<Expression> expr,
|
||||
virtual void on_expr_with_semicolon(bp<Expression> expr,
|
||||
parserstatemachine * p_psm);
|
||||
|
||||
/** update exprstate when expecting a symbol **/
|
||||
|
|
@ -189,6 +189,11 @@ namespace xo {
|
|||
void illegal_input_error(const char * self_name,
|
||||
const token_type & tk) const;
|
||||
|
||||
/** throw exception when unable to locate definition for a variable
|
||||
**/
|
||||
void unknown_variable_error(const char * self_name,
|
||||
const token_type & tk) const;
|
||||
|
||||
protected:
|
||||
/** explicit subtype: identifies derived class **/
|
||||
exprstatetype exs_type_;
|
||||
|
|
|
|||
|
|
@ -55,9 +55,9 @@ namespace xo {
|
|||
parserstatemachine * p_psm) override;
|
||||
virtual void on_formal_arglist(const std::vector<rp<Variable>> & argl,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_expr_with_semicolon(ref::brw<Expression> expr,
|
||||
virtual void on_expr_with_semicolon(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_semicolon_token(const token_type & tk,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ namespace xo {
|
|||
const rp<Expression> & rhs,
|
||||
parserstatemachine * p_psm);
|
||||
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
||||
virtual void on_rightbrace_token(const token_type & tk,
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ namespace xo {
|
|||
bool admits_f64() const;
|
||||
bool admits_rightparen() const;
|
||||
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_symbol(const std::string & symbol,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ namespace xo {
|
|||
/** create parser in initial state;
|
||||
* parser is ready to receive tokens via @ref include_token
|
||||
**/
|
||||
parser() = default;
|
||||
parser();
|
||||
|
||||
/** for diagnostics: number of entries in parser stack **/
|
||||
std::size_t stack_size() const { return xs_stack_.size(); }
|
||||
|
|
|
|||
|
|
@ -40,13 +40,18 @@ namespace xo {
|
|||
**/
|
||||
rp<Variable> lookup_var(const std::string & x) const;
|
||||
|
||||
/** update/replace binding for variable @p x in lexical context
|
||||
* represented by this psm. Always acts on innermost frame.
|
||||
**/
|
||||
void upsert_var(bp<Variable> x);
|
||||
|
||||
void push_envframe(envframe x);
|
||||
void pop_envframe();
|
||||
|
||||
// ----- parsing outputs -----
|
||||
|
||||
void on_expr(ref::brw<Expression> expr);
|
||||
void on_expr_with_semicolon(ref::brw<Expression> expr);
|
||||
void on_expr(bp<Expression> expr);
|
||||
void on_expr_with_semicolon(bp<Expression> expr);
|
||||
void on_symbol(const std::string & symbol);
|
||||
|
||||
// ---- parsing inputs -----
|
||||
|
|
|
|||
|
|
@ -47,6 +47,10 @@ namespace xo {
|
|||
|
||||
/** @class progress_xs
|
||||
* @brief state machine for parsing a schematica runtime-value-expression
|
||||
*
|
||||
* Handles an expression that produces a value, for example appearing on the
|
||||
* right-hand side of a definition.
|
||||
*
|
||||
**/
|
||||
class progress_xs : public exprstate {
|
||||
public:
|
||||
|
|
@ -65,7 +69,7 @@ namespace xo {
|
|||
|
||||
bool admits_f64() const;
|
||||
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ namespace xo {
|
|||
**/
|
||||
static void start(parserstatemachine * p_psm);
|
||||
|
||||
virtual void on_expr(ref::brw<Expression> expr,
|
||||
virtual void on_expr(bp<Expression> expr,
|
||||
parserstatemachine * p_psm) override;
|
||||
|
||||
virtual void on_rightbrace_token(const token_type & tk,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue