XPlor/libs/dsl/parser.h
njohnson d7285b5bbe Enhance DSL interpreter with new built-in functions
Add support for:
- basename() function for extracting filenames from paths
- cstring() function for reading null-terminated strings
- ascii() function for reading fixed-length ASCII strings
- Enhanced type registry with additional primitive types
- Improved parser with better error handling

These additions enable more flexible XScript definitions for
parsing binary file formats.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 16:35:35 -05:00

61 lines
1.3 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();
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