This commit is contained in:
codeboss 2025-02-12 14:41:24 +08:00
parent 956bc5c85c
commit cab9153783
4 changed files with 32 additions and 24 deletions

View File

@ -76,6 +76,10 @@
<Link>
<AdditionalDependencies>libWords.lib;libSyntax.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<ClCompile>
<LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="Configuration">
<ClCompile>

View File

@ -10,11 +10,11 @@ int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile in(u8"D:\\Projects\\Cpp\\WsNovelParser\\CoreTest\\syntax_example.txt");
QFile in("D:\\Projects\\Cpp\\WsNovelParser\\CoreTest\\syntax_example.txt");
in.open(QIODevice::ReadOnly|QIODevice::Text);
QTextStream tt(&in);
lib_words::WordReader reader;
auto vwords = reader.wordsFrom(tt, u8"D:\\Projects\\Cpp\\WsNovelParser\\CoreTest\\syntax_example.txt");
auto vwords = reader.wordsFrom(tt, "D:\\Projects\\Cpp\\WsNovelParser\\CoreTest\\syntax_example.txt");
auto words = vwords;
while (words) {
@ -25,7 +25,7 @@ int main(int argc, char *argv[])
ast_gen::SyntaxParser parser(example_novel::NovalSyntax::getSyntaxTree());
auto rst = parser.parse(vwords);
for (auto one : rst) {
qDebug() << u8"===================================================";
qDebug() << "===================================================";
qDebug().noquote() << one->totalErrors();
auto vtoken = one->currentToken();
while (vtoken) {

View File

@ -12,7 +12,7 @@ using namespace std;
#include "syntax_templets.h"
using namespace lib_composit;
void point_nmset(std::shared_ptr<PointDefines> inst, std::shared_ptr<const lib_token::IToken> token) {
void point_nm_set(std::shared_ptr<PointDefines> inst, std::shared_ptr<const lib_token::IToken> token) {
inst->addToken(token);
inst->setName(token->content());
}
@ -32,15 +32,15 @@ void slice_nm_set(std::shared_ptr<FragmentSlice> inst, std::shared_ptr<const lib
inst->addToken(token);
inst->setName(token->content());
}
void story_nmset(std::shared_ptr<StoryDefine> inst, std::shared_ptr<const lib_token::IToken> token) {
void story_nm_set(std::shared_ptr<StoryDefine> inst, std::shared_ptr<const lib_token::IToken> token) {
inst->addToken(token);
inst->setName(token->content());
}
void article_nset(std::shared_ptr<ArticleDefine>inst, std::shared_ptr<const lib_token::IToken> token) {
void article_nm_set(std::shared_ptr<ArticleDefine>inst, std::shared_ptr<const lib_token::IToken> token) {
inst->addToken(token);
inst->setName(token->content());
}
void volume_nset(std::shared_ptr<VolumeDefine> inst, std::shared_ptr<const lib_token::IToken> token) {
void volume_nm_set(std::shared_ptr<VolumeDefine> inst, std::shared_ptr<const lib_token::IToken> token) {
inst->addToken(token);
inst->setName(token->content());
}
@ -49,7 +49,7 @@ void rank_set(std::shared_ptr<RankDeclare> inst, std::shared_ptr<const lib_token
inst->setRank(token->content().toInt());
}
using TextDeclsSyntaxDef = lib_composit::Multi<AnyR<TMate<TextSection, Numbers>, TMate<TextSection, NormalText>, TMate<TextSection, ReferMk>, TMate<TextSection, SplitMk>>>;
using TextDeclsSyntaxDef = lib_composit::Multi<AnyR<TMatch<Numbers>, TMatch<NormalText>, TMatch<ReferMk>, TMatch<SplitMk>>>;
class DeclSyntax : public ElementRule<TextSection, (int) NovelNode::TextSection, TextDeclsSyntaxDef> {
public:
DeclSyntax() : ElementRule<TextSection, (int) NovelNode::TextSection, TextDeclsSyntaxDef>("decl_section") { }
@ -62,9 +62,9 @@ public:
using PointSyntaxDef = lib_composit::SeqsR<TMate<PointDefines, LBracket>, TMate<PointDefines, PointWord>, TAct<PointDefines, NameText, point_nmset>,
using PointSyntaxDef = lib_composit::SeqsR<TMatch<LBracket>, TMatch<PointWord>, TAct<PointDefines, NameText, point_nm_set>,
Opt<DeclSyntax>,
TMate<PointDefines, RBracket>>;
TMatch<RBracket>>;
class PointSyntax : public ElementRule<PointDefines, (int) NovelNode::PointDefines, PointSyntaxDef> {
public:
PointSyntax() : ElementRule<PointDefines, (int) NovelNode::PointDefines, PointSyntaxDef>("point_define") { }
@ -77,9 +77,9 @@ public:
using ReferSyntaxDef = lib_composit::SeqsR<TMate<PointRefers, LBracket>, TMate<PointRefers, ReferMk>, TMate<PointRefers, PointWord>, TAct<PointRefers, NameText, ref_story_set>, TMate<PointRefers, ReferMk>, TAct<PointRefers, NameText, ref_slice_set>, TMate<PointRefers, ReferMk>, TAct<PointRefers, NameText, ref_point_set>,
using ReferSyntaxDef = lib_composit::SeqsR<TMatch<LBracket>, TMatch<ReferMk>, TMatch<PointWord>, TAct<PointRefers, NameText, ref_story_set>, TMatch<ReferMk>, TAct<PointRefers, NameText, ref_slice_set>, TMatch<ReferMk>, TAct<PointRefers, NameText, ref_point_set>,
Opt<DeclSyntax>,
TMate<PointDefines, RBracket>>;
TMatch<RBracket>>;
class ReferSyntax : public ElementRule<PointRefers, (int) NovelNode::PointRefers, ReferSyntaxDef> {
public:
ReferSyntax() : ElementRule < PointRefers, (int) NovelNode::PointRefers, ReferSyntaxDef>("point_refer") { }
@ -92,9 +92,9 @@ public:
using SliceSyntaxDef = lib_composit::SeqsR<TMate<FragmentSlice, LBracket>, TMate<FragmentSlice, SliceWord>, TAct<FragmentSlice, NameText, slice_nm_set>,
using SliceSyntaxDef = lib_composit::SeqsR<TMatch<LBracket>, TMatch<SliceWord>, TAct<FragmentSlice, NameText, slice_nm_set>,
lib_composit::OptMulti<AnyR<PointSyntax, ReferSyntax, DeclSyntax>>,
TMate<FragmentSlice, RBracket>>;
TMatch<RBracket>>;
class SliceSyntax : public ElementRule<FragmentSlice, (int) NovelNode::FragmentSlice, SliceSyntaxDef> {
public:
SliceSyntax() : ElementRule<FragmentSlice, (int) NovelNode::FragmentSlice, SliceSyntaxDef>("slice_define") { }
@ -107,9 +107,9 @@ public:
using StorySyntaxDef = lib_composit::SeqsR<TMate<StoryDefine, LBracket>, TMate<StoryDefine, StoryWord>, TAct<StoryDefine, NameText, story_nmset>,
using StorySyntaxDef = lib_composit::SeqsR<TMatch<LBracket>, TMatch<StoryWord>, TAct<StoryDefine, NameText, story_nm_set>,
lib_composit::OptMulti<AnyR<SliceSyntax, DeclSyntax>>,
TMate<StoryDefine, RBracket>>;
TMatch<RBracket>>;
class StorySyntax : public ElementRule<StoryDefine, (int) NovelNode::StoryDefine, StorySyntaxDef> {
public:
StorySyntax() : ElementRule<StoryDefine, (int) NovelNode::StoryDefine, StorySyntaxDef>("story_define") { }
@ -122,9 +122,9 @@ public:
using ArticleSyntaxDef = lib_composit::SeqsR<TMate<ArticleDefine, LBracket>, TMate<ArticleDefine, ArticleWord>, TAct<ArticleDefine, NameText, article_nset>,
using ArticleSyntaxDef = lib_composit::SeqsR<TMatch<LBracket>, TMatch<ArticleWord>, TAct<ArticleDefine, NameText, article_nm_set>,
lib_composit::OptMulti<AnyR<ReferSyntax, DeclSyntax>>,
TMate<ArticleDefine, RBracket>>;
TMatch<RBracket>>;
class ArticleSyntax : public ElementRule<ArticleDefine, (int) NovelNode::ArticleDefine, ArticleSyntaxDef> {
public:
ArticleSyntax() : ElementRule<ArticleDefine, (int) NovelNode::ArticleDefine, ArticleSyntaxDef>("article_define") { }
@ -137,9 +137,9 @@ public:
using VolumeSyntaxDef = lib_composit::SeqsR<TMate<VolumeDefine, LBracket>, TMate<VolumeDefine, VolumeWord>, TAct<VolumeDefine, NameText, volume_nset>,
using VolumeSyntaxDef = lib_composit::SeqsR<TMatch<LBracket>, TMatch<VolumeWord>, TAct<VolumeDefine, NameText, volume_nm_set>,
lib_composit::OptMulti<AnyR<ArticleSyntax, DeclSyntax>>,
TMate<VolumeDefine, RBracket>>;
TMatch<RBracket>>;
class VolumeSyntax : public ElementRule<VolumeDefine, (int) NovelNode::VolumeDefine, VolumeSyntaxDef> {
public:
VolumeSyntax() : ElementRule<VolumeDefine, (int) NovelNode::VolumeDefine, VolumeSyntaxDef>("volume_define") { }
@ -152,7 +152,7 @@ public:
using RankSyntaxDef = lib_composit::SeqsR<TMate<RankDeclare, DeclareSymbo>, TMate<RankDeclare, RankWord>, TAct<RankDeclare, Numbers, rank_set>>;
using RankSyntaxDef = lib_composit::SeqsR<TMatch<DeclareSymbo>, TMatch<RankWord>, TAct<RankDeclare, Numbers, rank_set>>;
class RankSyntax : public ElementRule<RankDeclare, (int) NovelNode::RankDeclaration, RankSyntaxDef> {
public:
RankSyntax() : ElementRule<RankDeclare, (int) NovelNode::RankDeclaration, RankSyntaxDef>("rank_define") { }
@ -218,3 +218,7 @@ public:
// node_register(child, next_child_items);
// }
//}
std::shared_ptr<const lib_syntax::ExprRule> example_novel::NovalSyntax::getSyntaxTree() {
return std::shared_ptr<DocumentSyntax>();
}

View File

@ -57,7 +57,7 @@ namespace lib_composit {
void apntk(std::shared_ptr<ExprT> expr, std::shared_ptr<const lib_token::IToken> t) {
expr->addToken(t);
}
template<typename E, typename T>
requires std::derived_from<E, ast_basic::IExprInstance>&& std::derived_from<T, lib_token::ITokenProcess>
class TMate : public TAct<E, T, apntk> { };
template<typename T>
requires std::derived_from<T, lib_token::ITokenProcess>
class TMatch : public TAct<ast_basic::IExprInstance, T, apntk<ast_basic::IExprInstance>> { };
}