blob: ca90113906d04890295cbd2423ccfb130e666687 [file] [log] [blame]
swissChili8a581c62021-12-07 13:29:21 -08001#pragma once
2
3#include "Token.h"
4#include "AstNode.h"
swissChili918557c2022-02-20 20:16:34 -08005#include "VarContext.h"
6#include "Matcher.h"
swissChili8a581c62021-12-07 13:29:21 -08007
swissChili918557c2022-02-20 20:16:34 -08008using SentenceResultFn = std::function<QList<Token> (VarContext)>;
swissChili323883d2022-02-20 16:35:23 -08009
swissChili8a581c62021-12-07 13:29:21 -080010class Sentence {
11public:
12 Sentence() = default;
swissChili323883d2022-02-20 16:35:23 -080013 ~Sentence();
swissChili8a581c62021-12-07 13:29:21 -080014 Sentence(QList<Token> pattern, QList<AstNode> result);
swissChili323883d2022-02-20 16:35:23 -080015 Sentence(QList<Token> pattern, SentenceResultFn result);
16
17 bool isExternal() const;
swissChili918557c2022-02-20 20:16:34 -080018 QList<Token> externResult(MatchResult args) const;
swissChili8a581c62021-12-07 13:29:21 -080019
20 QList<Token> pattern() const;
21 QList<AstNode> result() const;
22
23 operator QString() const;
24
25protected:
26 QList<Token> _pattern;
27 QList<AstNode> _result;
swissChili323883d2022-02-20 16:35:23 -080028 SentenceResultFn _native = nullptr;
swissChili8a581c62021-12-07 13:29:21 -080029};
30
31class Function {
32public:
33 Function() = default;
34 explicit Function(QString name);
35 Function(QString name, QList<Sentence> sentences);
36
37 void addSentence(Sentence sentence);
swissChili323883d2022-02-20 16:35:23 -080038 void addNativeSentence(QString pattern, SentenceResultFn fn);
swissChili8a581c62021-12-07 13:29:21 -080039
40 QString name() const;
41 QList<Sentence> sentences() const;
42
43 operator QString() const;
44
45private:
46 QString _name;
47 QList<Sentence> _sentences;
48};