ready to design g4

This commit is contained in:
2024-08-05 13:44:28 +00:00
parent 388e4fda04
commit 9245c4fae7
5 changed files with 80 additions and 4 deletions

View File

@ -1,2 +1,5 @@
#include<ios> #ifndef SEMANTIC_H
#define SEMANTIC_H
#include <ios>
int SemanticCheck(std::istream &fin); int SemanticCheck(std::istream &fin);
#endif

View File

@ -0,0 +1,15 @@
#ifndef VISITOR_H
#define VISITOR_H
#include "MXParserVisitor.h"
class Visitor : public MXParserVisitor {
public:
virtual std::any visitMxprog(MXParser::MxprogContext *context);
virtual std::any visitFunction(MXParser::FunctionContext *context);
virtual std::any visitType(MXParser::TypeContext *context);
virtual std::any visitBlock(MXParser::BlockContext *context);
virtual std::any visitStatement(MXParser::StatementContext *context);
virtual std::any visitExpression(MXParser::ExpressionContext *context);
virtual std::any visitReturnStmt(MXParser::ReturnStmtContext *context);
virtual std::any visitIfStmt(MXParser::IfStmtContext *context);
};
#endif

View File

@ -1,5 +1,9 @@
include_directories(/usr/include/antlr4-runtime/) include_directories(/usr/include/antlr4-runtime/)
include_directories(${CMAKE_SOURCE_DIR}/include/semantic) include_directories(${CMAKE_SOURCE_DIR}/include/semantic)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/antlr-generated)
file(GLOB ANLTR_SOURCES "antlr-generated/*.cpp")
file(GLOB SEMANTIC_SOURCES "*.cpp") file(GLOB SEMANTIC_SOURCES "*.cpp")
add_library(mx-antlr STATIC ${ANLTR_SOURCES})
add_library(semantic STATIC ${SEMANTIC_SOURCES}) add_library(semantic STATIC ${SEMANTIC_SOURCES})
target_link_libraries(semantic PUBLIC antlr4-runtime) target_link_libraries(mx-antlr PUBLIC antlr4-runtime)
target_link_libraries(semantic PUBLIC antlr4-runtime mx-antlr)

View File

@ -1,4 +1,17 @@
#include "semantic.h" #include "semantic.h"
#include <iostream>
#include "MXLexer.h"
#include "MXParser.h"
#include "antlr4-runtime.h"
#include "visitor.h"
int SemanticCheck(std::istream &fin) { int SemanticCheck(std::istream &fin) {
; antlr4::ANTLRInputStream input(fin);
MXLexer lexer(&input);
antlr4::CommonTokenStream tokens(&lexer);
tokens.fill();
MXParser parser(&tokens);
antlr4::tree::ParseTree *tree = parser.mxprog();
Visitor visitor;
visitor.visit(tree);
return 0;
} }

41
src/semantic/visitor.cpp Normal file
View File

@ -0,0 +1,41 @@
#include "visitor.h"
std::any Visitor::visitMxprog(MXParser::MxprogContext *context) {
// 空的函数体
return {};
}
std::any Visitor::visitFunction(MXParser::FunctionContext *context) {
// 空的函数体
return {};
}
std::any Visitor::visitType(MXParser::TypeContext *context) {
// 空的函数体
return {};
}
std::any Visitor::visitBlock(MXParser::BlockContext *context) {
// 空的函数体
return {};
}
std::any Visitor::visitStatement(MXParser::StatementContext *context) {
// 空的函数体
return {};
}
std::any Visitor::visitExpression(MXParser::ExpressionContext *context) {
// 空的函数体
return {};
}
std::any Visitor::visitReturnStmt(MXParser::ReturnStmtContext *context) {
// 空的函数体
return {};
}
std::any Visitor::visitIfStmt(MXParser::IfStmtContext *context) {
// 空的函数体
return {};
}