原创 HBuilderX 修改默認的終端

修改D:\dev\tool\HBuilderX\plugins\builtincef3terminal\script\main.js文件 大概16行的位置 if(isWin){ shell = 'D:\\dev\\tool\\cmder\

原创 LLVM 工具使用

opt opt -S -instcombine src.ll -o out.ll 使用instcombine參數優化ll,很像LLVM PASS 優化器 更多的優化可以查看 opt -h clang clang.exe -emit-llvm

原创 LLVM 獲取Value Type

void llvtype(std::string_view k, Value* v) { std::cout << std::format("{}:{}:{}", k, (int)v->getType()->getT

原创 LLVM Constant Value to c++ value

auto llval = b.getInt32(-1); std::cout << llval->getZExtValue() << "\n"; // 無符號 std::cout << llval->getSExtValue(

原创 llvm block

#include "llvm/ExecutionEngine/Orc/LLJIT.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" #include "llvm/

原创 Bison 命名位置

expr_1: IDENT /*index 2*/ "=" /*index 1*/ expr_1 /*index 0*/ { $$ = new VarAssignAst($1, token::EQ, $3); }

原创 vscode use cl.exe build C/C++

.vscode/tasks.json { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.

原创 c++ parse argv

#include <iostream> #include <format> int main(int argc, char* argv[]) { if (argc > 1) { char prefix; char* o

原创 Bison matching list

words demo lexer.l: %option noyywrap noline %{ #include <iostream> #include "parser.h" #define YY_DECL yy::parser::sym

原创 c++ 智能指針 shared_ptr 在多態上的使用

#include <iostream> #include <memory> using namespace std; class Base { public: virtual ~Base() = default; /* 使其多態 */

原创 Flex 將輸入設置爲內存字符串

#include <iostream> #include "lexer.h" #define yylex aaslex #define yy_scan_string aas_scan_string #define yy_delete_bu

原创 Flex 替換輸入的字符串

#include <iostream> #include "lexer.h" #define yylex aaslex #define yy_scan_string aas_scan_string #define yy_delete_bu

原创 llvm for expr

想要什麼: int fun(int p1) { int r = 0; for(int i = 0; i < p1; i++) { r = r + i + p1; } return r; } IR: define

原创 llvm function expr

想要什麼: int add1(int p1) { return 1 + p1; } IR: define i32 @add1(i32 %p1) { entry: %retVal = add i32 1, %p1 ret i32 %

原创 llvm if expr

想要什麼: int fun(int p1) { if(p1 < 5) return 1; else return 2; } IR: define i32 @fun(i32 %p1) { entry: %cmp = icmp slt