Skip to content

Commit

Permalink
add grammar-lexer
Browse files Browse the repository at this point in the history
  • Loading branch information
wu-kan committed Jan 15, 2024
1 parent fcb0f0d commit 6e292a0
Showing 1 changed file with 26 additions and 37 deletions.
63 changes: 26 additions & 37 deletions grammar/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
#include "CListener.h"
#include "CParser.h"
#include "CVisitor.h"
#include <algorithm>
#include <antlr4-runtime.h>
#include <cstring>
#include <llvm/Support/JSON.h>
#include <llvm/Support/MemoryBuffer.h>
#include <llvm/Support/raw_ostream.h>
#include <string>
#include <unordered_map>

int main(int argc, char **argv) {
auto llvmin = llvm::MemoryBuffer::getFileOrSTDIN("-");
Expand All @@ -18,44 +20,31 @@ int main(int argc, char **argv) {
sysu_grammar::CLexer lexer(&input);
antlr4::CommonTokenStream tokens(&lexer);
tokens.fill();
if (argc >= 2 && !std::strcmp(argv[1], "-dump-tokens")) {
// 请完成此处的词法分析器
#if 0
if (argc >= 2 && argv[1] == std::string("-dump-tokens")) {
// 请完成此处的词法分析器
for (auto token : tokens.getTokens()) {
llvm::outs() << token->toString() << "\n";
if (token->getChannel() != antlr4::Token::HIDDEN_CHANNEL) {
std::string t = lexer.getVocabulary().getSymbolicName(token->getType());
std::unordered_map<std::string, std::string> transform_table{
{"Int", "int"},
{"Identifier", "identifier"},
{"LeftParen", "l_paren"},
{"RightParen", "r_paren"},
{"LeftBrace", "l_brace"},
{"Return", "return"},
{"Constant", "numeric_constant"},
{"Semi", "semi"},
{"RightBrace", "r_brace"},
{"EOF", "eof"}};
if (transform_table.count(t))
t = transform_table[t];
llvm::outs() << t << " \'" << (t != "eof" ? token->getText() : "")
<< "\'\t\tLoc=<"
<< "<stdin>"
<< ":" << token->getLine() << ":"
<< token->getCharPositionInLine() + 1 << ">\n";
}
}
#else
llvm::outs()
<< "int \'int\' "
"Loc=<tester/functional/000_main.sysu.c:1:1> "
<< "\n"
<< "identifier \'main\' "
"Loc=<tester/functional/000_main.sysu.c:1:5> "
<< "\n"
<< "l_paren \'(\' "
"Loc=<tester/functional/000_main.sysu.c:1:9> "
<< "\n"
<< "r_paren \')\' "
"Loc=<tester/functional/000_main.sysu.c:1:10> "
<< "\n"
<< "l_brace \'{\' "
"Loc=<tester/functional/000_main.sysu.c:1:11> "
<< "\n"
<< "return \'return\' "
"Loc=<tester/functional/000_main.sysu.c:2:5> "
<< "\n"
<< "numeric_constant \'3\' "
"Loc=<tester/functional/000_main.sysu.c:2:12> "
<< "\n"
<< "semi \';\' "
"Loc=<tester/functional/000_main.sysu.c:2:13> "
<< "\n"
<< "r_brace \'}\' "
"Loc=<tester/functional/000_main.sysu.c:3:1> "
<< "\n"
<< "eof \'\' Loc=<tester/functional/000_main.sysu.c:3:2> "
<< "\n";
#endif
return 0;
}
sysu_grammar::CParser parser(&tokens);
Expand Down

0 comments on commit 6e292a0

Please sign in to comment.