XPlor/libs/dsl/parser.h
njohnson c45d5cba86 Add XScript language features and DslKeys abstraction
- Add inline, array, const, and match statement syntax
- Add true/false keywords and deflate() decompression function
- Introduce DslKeys enum for internal metadata key management
- Improve parse_here delegation pattern with variable merging
- Remove deprecated bracket attribute syntax (use ui() instead)
- Enhance script type editor with additional functionality
- Remove obsolete install.cmd

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:08:26 -05:00

65 lines
1.5 KiB
C++

#ifndef PARSER_H
#define PARSER_H
#include "ast.h"
#include "lexer.h"
struct TypeAttrs {
bool root = false;
QString display;
};
class Parser {
public:
explicit Parser(Lexer lex);
Module parseModule();
private:
TypeDef parseTypeDef();
QVector<StmtPtr> parseBlock();
StmtPtr parseStatement();
StmtPtr parseScalarStmt();
StmtPtr parseSkipStmt();
StmtPtr parseAlignStmt();
StmtPtr parseSeekStmt();
StmtPtr parseIfStmt();
StmtPtr parseWhileStmt();
StmtPtr parseRepeatStmt();
StmtPtr parseForStmt();
StmtPtr parseAssignStmt();
TypeAttrs parseTypeAttrs();
UiFlags parseUiFlags(bool defaultUi);
QVector<StmtPtr> parseCriteriaBlock();
StmtPtr parseRequireStmt();
StmtPtr parseByteOrderStmt();
StmtPtr parseBreakStmt();
StmtPtr parseInlineStmt();
StmtPtr parseArrayStmt();
StmtPtr parseConstStmt();
StmtPtr parseMatchStmt();
ExprPtr parseExpr(int minPrec = 0);
ExprPtr parsePrimary();
ExprPtr parsePostfix(ExprPtr lhs);
int precedence(const Token& t) const;
QString tokenOpText(const Token& t) const;
// pipeline: expr | stage | stage
ExprPtr parsePipeIfAny(ExprPtr base);
Token expect(TokenKind k, const char* msg) { return m_lex.expect(k, msg); }
bool match(TokenKind k) { return m_lex.match(k); }
const Token& peek() const { return m_lex.peek(); }
ScalarType scalarFrom(TokenKind k) const;
Lexer m_lex;
};
#endif // PARSER_H