Initial Parser Implementation and Feature Completion #1
@ -28,6 +28,7 @@ namespace arti::lang::ast {
|
|||||||
return std::make_unique<typename Node::element_type>();
|
return std::make_unique<typename Node::element_type>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string toString(const AST &tree, std::size_t padding = 0);
|
std::string toDot(const AST &tree);
|
||||||
|
std::string toString(const AST &tree, std::string prefix = "");
|
||||||
|
|
||||||
} // namespace arti::lang::ast
|
} // namespace arti::lang::ast
|
||||||
|
|||||||
@ -111,6 +111,6 @@ namespace arti::lang {
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::string toString(const Token &value);
|
std::string toString(const Token &value);
|
||||||
std::string toString(const TokenV &value);
|
std::string_view toString(const TokenV &value);
|
||||||
|
|
||||||
} // namespace arti::lang
|
} // namespace arti::lang
|
||||||
|
|||||||
1048
lib/src/Parser/AST/toDot.cpp
Normal file
1048
lib/src/Parser/AST/toDot.cpp
Normal file
File diff suppressed because it is too large
Load Diff
1508
lib/src/Parser/AST/toString.cpp
Normal file
1508
lib/src/Parser/AST/toString.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -7,109 +7,109 @@ namespace arti::lang {
|
|||||||
std::string toString(const Token &value) {
|
std::string toString(const Token &value) {
|
||||||
using enum TokenV;
|
using enum TokenV;
|
||||||
|
|
||||||
std::string tokenStr = toString(value.value);
|
std::string tokenStr{ toString(value.value) };
|
||||||
|
|
||||||
if (value.value == tkEOF) {
|
if (value.value == tkEOF) {
|
||||||
return std::format("Token{{ {} }}", tokenStr);
|
return "EOF";
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::format("Token{{ {}, {} }}", tokenStr, value.strValue);
|
return std::format("{}", value.strValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string toString(const TokenV &value) {
|
std::string_view toString(const TokenV &value) {
|
||||||
using enum TokenV;
|
using enum TokenV;
|
||||||
|
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case tkEOF: return "tkEOF";
|
case tkEOF: return "EOF";
|
||||||
case tkString: return "tkString";
|
case tkString: return "string";
|
||||||
case tkDecimal: return "tkDecimal";
|
case tkDecimal: return "number";
|
||||||
case tkInteger: return "tkInteger";
|
case tkInteger: return "integer";
|
||||||
case tkCharacter: return "tkCharacter";
|
case tkCharacter: return "character";
|
||||||
case tkIdentifier: return "tkIdentifier";
|
case tkIdentifier: return "identifier";
|
||||||
case opDot: return "opDot";
|
case opDot: return "'.'";
|
||||||
case opMod: return "opMod";
|
case opMod: return "'%'";
|
||||||
case opPlus: return "opPlus";
|
case opPlus: return "'+'";
|
||||||
case opHyphen: return "opHyphen";
|
case opHyphen: return "'-'";
|
||||||
case opSlash: return "opSlash";
|
case opSlash: return "'/'";
|
||||||
case opBang: return "opBang";
|
case opBang: return "'!'";
|
||||||
case opStar: return "opStar";
|
case opStar: return "'*'";
|
||||||
case opColon: return "opColon";
|
case opColon: return "':'";
|
||||||
case opComma: return "opComma";
|
case opComma: return "','";
|
||||||
case opAssign: return "opAssign";
|
case opAssign: return "'='";
|
||||||
case opAccess: return "opAccess";
|
case opAccess: return "'::'";
|
||||||
case opSemicolon: return "opSemicolon";
|
case opSemicolon: return "';'";
|
||||||
case opCaret: return "opCaret";
|
case opCaret: return "'^'";
|
||||||
case opTilde: return "opTilde";
|
case opTilde: return "'~'";
|
||||||
case opEq: return "opEq";
|
case opEq: return "'=='";
|
||||||
case opNeq: return "opNeq";
|
case opNeq: return "'!='";
|
||||||
case opLt: return "opLt";
|
case opLt: return "'<'";
|
||||||
case opGt: return "opGt";
|
case opGt: return "'>'";
|
||||||
case opLtEq: return "opLtEq";
|
case opLtEq: return "'<='";
|
||||||
case opGtEq: return "opGtEq";
|
case opGtEq: return "'>='";
|
||||||
case opLShift: return "opLShift";
|
case opLShift: return "'<<'";
|
||||||
case opRShift: return "opRShift";
|
case opRShift: return "'>>'";
|
||||||
case opBoolAnd: return "opBoolAnd";
|
case opBoolAnd: return "'&&'";
|
||||||
case opBoolOr: return "opBoolOr";
|
case opBoolOr: return "'||'";
|
||||||
case opAnd: return "opAnd";
|
case opAnd: return "'&'";
|
||||||
case opOr: return "opOr";
|
case opOr: return "'|'";
|
||||||
case opLParen: return "opLParen";
|
case opLParen: return "'('";
|
||||||
case opRParen: return "opRParen";
|
case opRParen: return "')'";
|
||||||
case opLBracket: return "opLBracket";
|
case opLBracket: return "'['";
|
||||||
case opRBracket: return "opRBracket";
|
case opRBracket: return "']'";
|
||||||
case opLSquirly: return "opLSquirly";
|
case opLSquirly: return "'{'";
|
||||||
case opRSquirly: return "opRSquirly";
|
case opRSquirly: return "'}'";
|
||||||
case opArrow: return "opArrow";
|
case opArrow: return "'->'";
|
||||||
case opPlusAssign: return "opPlusAssign";
|
case opPlusAssign: return "'+='";
|
||||||
case opHyphenAssign: return "opHyphenAssign";
|
case opHyphenAssign: return "'-='";
|
||||||
case opStarAssign: return "opStarAssign";
|
case opStarAssign: return "'*='";
|
||||||
case opSlashAssign: return "opSlashAssign";
|
case opSlashAssign: return "'/='";
|
||||||
case opModAssign: return "opModAssign";
|
case opModAssign: return "'%='";
|
||||||
case opAndAssign: return "opAndAssign";
|
case opAndAssign: return "'&='";
|
||||||
case opOrAssign: return "opOrAssign";
|
case opOrAssign: return "'|='";
|
||||||
case opLShiftAssign: return "opLShiftAssign";
|
case opLShiftAssign: return "'<<='";
|
||||||
case opRShiftAssign: return "opRShiftAssign";
|
case opRShiftAssign: return "'>>='";
|
||||||
case opBoolAndAssign: return "opBoolAndAssign";
|
case opBoolAndAssign: return "'&&='";
|
||||||
case opBoolOrAssign: return "opBoolORAssign";
|
case opBoolOrAssign: return "'||='";
|
||||||
case opMut: return "opMut";
|
case opMut: return "'$'";
|
||||||
case opOpt: return "opOpt";
|
case opOpt: return "'?'";
|
||||||
case opSliceSize: return "opSliceSize";
|
case opSliceSize: return "'.#'";
|
||||||
case opPtrSlice: return "opPtrSlice";
|
case opPtrSlice: return "'.['";
|
||||||
case opSlicePtr: return "opSlicePtr";
|
case opSlicePtr: return "'.*'";
|
||||||
case opReflect: return "opReflect";
|
case opReflect: return "'.@'";
|
||||||
case opLabel: return "opLabel";
|
case opLabel: return "':='";
|
||||||
case kwUnderscore: return "kwUnderscore";
|
case kwUnderscore: return "'underscore'";
|
||||||
case kwOr: return "kwOr";
|
case kwOr: return "'or'";
|
||||||
case kwNot: return "kwNot";
|
case kwNot: return "'not'";
|
||||||
case kwAnd: return "kwAnd";
|
case kwAnd: return "'and'";
|
||||||
case kwIf: return "kwIf";
|
case kwIf: return "'if'";
|
||||||
case kwElse: return "kwElse";
|
case kwElse: return "'else'";
|
||||||
case kwFn: return "kwFn";
|
case kwFn: return "'fn'";
|
||||||
case kwEnum: return "kwEnum";
|
case kwEnum: return "'enum'";
|
||||||
case kwStruct: return "kwStruct";
|
case kwStruct: return "'struct'";
|
||||||
case kwDef: return "kwDef";
|
case kwDef: return "'def'";
|
||||||
case kwLet: return "kwLet";
|
case kwLet: return "'let'";
|
||||||
case kwFor: return "kwFor";
|
case kwFor: return "'for'";
|
||||||
case kwLoop: return "kwLoop";
|
case kwLoop: return "'loop'";
|
||||||
case kwBreak: return "kwBreak";
|
case kwBreak: return "'break'";
|
||||||
case kwContinue: return "kwContinue";
|
case kwContinue: return "'continue'";
|
||||||
case kwDo: return "kwDo";
|
case kwDo: return "'do'";
|
||||||
case kwWhile: return "kwWhile";
|
case kwWhile: return "'while'";
|
||||||
case kwMatch: return "kwMatch";
|
case kwMatch: return "'match'";
|
||||||
case kwSwitch: return "kwSwitch";
|
case kwSwitch: return "'switch'";
|
||||||
case kwReturn: return "kwReturn";
|
case kwReturn: return "'return'";
|
||||||
case kwUnreachable: return "kwUnreachable";
|
case kwUnreachable: return "'unreachable'";
|
||||||
case kwTypename: return "kwTypename";
|
case kwTypename: return "'typename'";
|
||||||
case kwDefer: return "kwDefer";
|
case kwDefer: return "'defer'";
|
||||||
case kwErrDefer: return "kwErrDefer";
|
case kwErrDefer: return "'errdefer'";
|
||||||
case kwTrue: return "kwTrue";
|
case kwTrue: return "'true'";
|
||||||
case kwFalse: return "kwFalse";
|
case kwFalse: return "'false'";
|
||||||
case kwNull: return "kwNull";
|
case kwNull: return "'null'";
|
||||||
case kwThis: return "kwThis";
|
case kwThis: return "'this'";
|
||||||
case kwImport: return "kwImport";
|
case kwImport: return "'import'";
|
||||||
case kwExport: return "kwExport";
|
case kwExport: return "'export'";
|
||||||
case kwModule: return "kwModule";
|
case kwModule: return "'module'";
|
||||||
case kwUsing: return "kwUsing";
|
case kwUsing: return "'using'";
|
||||||
default: return "<Undefined>";
|
default: return "<undefined>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user