ready to design g4
This commit is contained in:
@ -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
|
15
include/semantic/visitor.h
Normal file
15
include/semantic/visitor.h
Normal 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
|
@ -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)
|
@ -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
41
src/semantic/visitor.cpp
Normal 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 {};
|
||||||
|
}
|
Reference in New Issue
Block a user