format main.cpp
This commit is contained in:
parent
3148127319
commit
3640da1cf2
94
src/main.cpp
94
src/main.cpp
@ -1,27 +1,28 @@
|
|||||||
#include <bits/stdc++.h>
|
|
||||||
#include <argparse/argparse.hpp>
|
#include <argparse/argparse.hpp>
|
||||||
|
#include <bits/stdc++.h>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
enum class TokenType {
|
enum class TokenType {
|
||||||
COMMA, // ,
|
COMMA, // ,
|
||||||
SEMI, // ;
|
SEMI, // ;
|
||||||
LB,
|
LB, // {
|
||||||
RB,
|
RB, // }
|
||||||
LP,
|
LP, // (
|
||||||
RP,
|
RP, // )
|
||||||
LT,
|
LT, // <
|
||||||
RT, // { } ( ) < >
|
RT, // >
|
||||||
ASSIGN, // =
|
ASSIGN, // =
|
||||||
DOT, // .
|
DOT, // .
|
||||||
COLON, // :
|
COLON, // :
|
||||||
SCOPE, // ::
|
SCOPE, // ::
|
||||||
IMPLY, // ->
|
IMPLY, // ->
|
||||||
STRUCT, // struct
|
STRUCT, // struct
|
||||||
FN, // Fn
|
FN, // Fn
|
||||||
RETURN, // return
|
RETURN, // return
|
||||||
TYPEOF, // typeof
|
TYPEOF, // typeof
|
||||||
PUBLIC, // public
|
PUBLIC, // public
|
||||||
ID
|
ID, // identifier
|
||||||
|
EXCEED
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Token {
|
struct Token {
|
||||||
@ -36,26 +37,27 @@ vector<Token> tokens;
|
|||||||
void printTokens() {
|
void printTokens() {
|
||||||
wstring_convert<codecvt_utf8<wchar_t>> cvt;
|
wstring_convert<codecvt_utf8<wchar_t>> cvt;
|
||||||
string mp[] = {",",
|
string mp[] = {",",
|
||||||
";",
|
";",
|
||||||
"{",
|
"{",
|
||||||
"}",
|
"}",
|
||||||
"(",
|
"(",
|
||||||
")",
|
")",
|
||||||
"<",
|
"<",
|
||||||
">",
|
">",
|
||||||
"=",
|
"=",
|
||||||
".",
|
".",
|
||||||
":",
|
":",
|
||||||
"::",
|
"::",
|
||||||
"->",
|
"->",
|
||||||
"struct",
|
"struct",
|
||||||
"Fn",
|
"Fn",
|
||||||
"return",
|
"return",
|
||||||
"typeof",
|
"typeof",
|
||||||
"public",
|
"public",
|
||||||
"ID"};
|
"ID"};
|
||||||
for (auto u : tokens) {
|
for (auto u : tokens) {
|
||||||
cout << mp[static_cast<int>(u.type)] << " " << u.line << " " << cvt.to_bytes(u.s) << endl;
|
cout << mp[static_cast<int>(u.type)] << " " << u.line << " " << cvt.to_bytes(u.s)
|
||||||
|
<< endl;
|
||||||
}
|
}
|
||||||
cout << endl;
|
cout << endl;
|
||||||
}
|
}
|
||||||
@ -114,12 +116,12 @@ void read() {
|
|||||||
printf("error on line %d", line), exit(1);
|
printf("error on line %d", line), exit(1);
|
||||||
}
|
}
|
||||||
} else if ((s[pt] >= 0 && s[pt] < 128) ? (iswalpha(s[pt]) || s[pt] == L'_')
|
} else if ((s[pt] >= 0 && s[pt] < 128) ? (iswalpha(s[pt]) || s[pt] == L'_')
|
||||||
: iswprint(s[pt])) {
|
: iswprint(s[pt])) {
|
||||||
size_t r = pt + 1;
|
size_t r = pt + 1;
|
||||||
while (r < s.size()
|
while (r < s.size()
|
||||||
&& ((s[r] >= 0 && s[r] < 128)
|
&& ((s[r] >= 0 && s[r] < 128)
|
||||||
? (iswalpha(s[r]) || s[r] == L'_' || iswdigit(s[r]))
|
? (iswalpha(s[r]) || s[r] == L'_' || iswdigit(s[r]))
|
||||||
: iswprint(s[r]))) {
|
: iswprint(s[r]))) {
|
||||||
r++;
|
r++;
|
||||||
}
|
}
|
||||||
t = s.substr(pt, r - pt);
|
t = s.substr(pt, r - pt);
|
||||||
@ -191,7 +193,8 @@ bool sameType(shared_ptr<ValType> a, shared_ptr<ValType> b) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (a->type() == 0) {
|
if (a->type() == 0) {
|
||||||
auto aa = static_pointer_cast<TemplateType>(a), bb = static_pointer_cast<TemplateType>(b);
|
auto aa = static_pointer_cast<TemplateType>(a),
|
||||||
|
bb = static_pointer_cast<TemplateType>(b);
|
||||||
return aa == bb || eq.find({aa, bb}) != eq.end();
|
return aa == bb || eq.find({aa, bb}) != eq.end();
|
||||||
}
|
}
|
||||||
if (a->type() == 1) {
|
if (a->type() == 1) {
|
||||||
@ -201,7 +204,8 @@ bool sameType(shared_ptr<ValType> a, shared_ptr<ValType> b) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
assert(aa->mp.size() == bb->mp.size());
|
assert(aa->mp.size() == bb->mp.size());
|
||||||
for (auto ia = aa->mp.begin(), ib = bb->mp.begin(); ia != aa->mp.end(); ia++, ib++) {
|
for (auto ia = aa->mp.begin(), ib = bb->mp.begin(); ia != aa->mp.end();
|
||||||
|
ia++, ib++) {
|
||||||
assert(ia->first == ib->first);
|
assert(ia->first == ib->first);
|
||||||
if (!sameType(ia->second, ib->second)) {
|
if (!sameType(ia->second, ib->second)) {
|
||||||
return false;
|
return false;
|
||||||
@ -323,7 +327,8 @@ shared_ptr<ValType> struct_replace(shared_ptr<ValType> vt, shared_ptr<StructType
|
|||||||
for (auto u = vtt->str; u.get() != nullptr; u = u->fa.lock()) {
|
for (auto u = vtt->str; u.get() != nullptr; u = u->fa.lock()) {
|
||||||
vis.insert(u);
|
vis.insert(u);
|
||||||
}
|
}
|
||||||
for (auto u = ut->str; u.get() != nullptr && vis.find(u) == vis.end(); u = u->fa.lock()) {
|
for (auto u = ut->str; u.get() != nullptr && vis.find(u) == vis.end();
|
||||||
|
u = u->fa.lock()) {
|
||||||
for (auto tem : u->c1) {
|
for (auto tem : u->c1) {
|
||||||
tt->mp.erase(tem);
|
tt->mp.erase(tem);
|
||||||
}
|
}
|
||||||
@ -507,7 +512,8 @@ shared_ptr<ValType> createVal() {
|
|||||||
bool legal = vals.size() == tt->str->c2.size();
|
bool legal = vals.size() == tt->str->c2.size();
|
||||||
if (legal) {
|
if (legal) {
|
||||||
for (size_t i = 0; i < vals.size(); i++) {
|
for (size_t i = 0; i < vals.size(); i++) {
|
||||||
if (!sameType(vals[i], struct_replace(tt->str->c2[i], tt))) {
|
if (!sameType(vals[i],
|
||||||
|
struct_replace(tt->str->c2[i], tt))) {
|
||||||
legal = 0;
|
legal = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -817,15 +823,17 @@ void work() {
|
|||||||
createVar();
|
createVar();
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
argparse::ArgumentParser program("acpa", APP_VERSION
|
argparse::ArgumentParser program("acpa",
|
||||||
, argparse::default_arguments::help, false);
|
APP_VERSION,
|
||||||
|
argparse::default_arguments::help,
|
||||||
|
false);
|
||||||
program.add_argument("input_file")
|
program.add_argument("input_file")
|
||||||
.help("Source proof file")
|
.help("Source proof file")
|
||||||
.action([](const std::string &value) { return value; });
|
.action([](const std::string& value) { return value; });
|
||||||
try {
|
try {
|
||||||
program.parse_args(argc, argv);
|
program.parse_args(argc, argv);
|
||||||
} catch (const std::runtime_error &err) {
|
} catch (const std::runtime_error& err) {
|
||||||
cerr << err.what() << std::endl;
|
cerr << err.what() << std::endl;
|
||||||
cerr << program;
|
cerr << program;
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user