parse: add a range of internal parser definitions
This commit is contained in:
+26
-8
@@ -2,15 +2,15 @@
|
||||
#define PARSE_SYNTAX_H_
|
||||
|
||||
#include "../ast/ast.h"
|
||||
#include "../operator.h"
|
||||
#include "lex.h"
|
||||
#include "parse.h"
|
||||
#include "token.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
enum parse_operand_flags {
|
||||
OPERAND_BASIC = 0x01u,
|
||||
};
|
||||
extern void report_error(struct parse_ctx *ctx, const char *format, ...);
|
||||
|
||||
extern struct lex_token *peek_token(struct parse_ctx *ctx);
|
||||
extern enum token_type peek_token_type(struct parse_ctx *ctx);
|
||||
@@ -28,21 +28,39 @@ extern bool peek_int(struct parse_ctx *ctx);
|
||||
extern bool parse_linefeed(struct parse_ctx *ctx);
|
||||
extern bool parse_symbol(struct parse_ctx *ctx, enum token_symbol sym);
|
||||
extern bool parse_keyword(struct parse_ctx *ctx, enum token_keyword kw);
|
||||
extern bool parse_int(struct parse_ctx *ctx, long long *out);
|
||||
extern bool parse_word(struct parse_ctx *ctx, struct lex_token **out);
|
||||
extern bool parse_var(struct parse_ctx *ctx, struct lex_token **out);
|
||||
extern bool parse_flag(struct parse_ctx *ctx, struct lex_token **out);
|
||||
|
||||
extern bool peek_arith_expr(struct parse_ctx *ctx);
|
||||
extern bool parse_arith_expr(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool parse_operand(
|
||||
extern bool parse_arith_value(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool parse_arith_expr(
|
||||
struct parse_ctx *ctx,
|
||||
enum parse_operand_flags flags,
|
||||
enum operator_precedence minimum_precedence,
|
||||
struct ast_node **out);
|
||||
|
||||
extern bool parse_statement(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool peek_keyword_expr(struct parse_ctx *ctx);
|
||||
extern bool parse_keyword_expr(struct parse_ctx *ctx, struct ast_node **out);
|
||||
|
||||
extern bool parse_if(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool parse_func(struct parse_ctx *ctx, struct ast_node **out);
|
||||
|
||||
extern bool parse_fstring(struct parse_ctx *ctx, struct ast_node **out);
|
||||
|
||||
extern bool parse_block(struct parse_ctx *ctx, struct ast_node **out);
|
||||
|
||||
extern bool peek_command(struct parse_ctx *ctx);
|
||||
extern bool parse_pipeline(
|
||||
struct parse_ctx *ctx,
|
||||
struct ast_node *first_item,
|
||||
struct ast_node **out);
|
||||
extern bool parse_command(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool parse_cmdcall(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool parse_redirect(struct parse_ctx *ctx, struct ast_node **out);
|
||||
|
||||
extern bool parse_expr(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool peek_statement(struct parse_ctx *ctx);
|
||||
extern bool parse_statement(struct parse_ctx *ctx, struct ast_node **out);
|
||||
extern bool parse_statement_list(struct parse_ctx *ctx, struct ast_node **out);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user