✨컴공주✨ [1052682] · MS 2021 · 쪽지

2023-02-10 23:38:51
조회수 1,089

컴공 일기228

게시글 주소: https://orbi.kr/00061963695

오랜만에 일기를 쓰네요. 요새는, C/C++로 VM(Virtual Machine)을 제작해보는 개인 프로젝트를 진행 중에 있는데요...

우선 Assembler부터 만들어보고 있습니다. 일종의 기초 번역을 하는 장치를 소프트웨어로 구현해보고 있는 것이지요.


때론 컴퓨터공학을 공부하면서 느끼는 것이 있는데, 이것은 결국 '글쓰기'에 지나지 않는다는 생각입니다. 글을 정말 논리정연하게 잘 쓴다면, 개발하는 과정에서 엄청난 이점을 챙길 수 있다고 생각해요. Assembler를 만들어 보면서 그런 생각이 더더욱 강해지는 것 같습니다. 결국 번역이라는게, 작은 구문들로 나누어서 분석하는 것이라서요. 





지금 하고 있는 코드의 일부를 올립니다... 아직 만들어야 할 모듈이 많아요. 그 중 하나가 Paser라는 친구인데, 기본적으로 프로그램 명령어들을 솎아내는 기능을 수행한다고 보시면 될 것 같습니다. 


#include "Parser.h"


using namespace std;


Parser::Parser(string& fileName)

{

    fin.open(fileName);


    if (fin.fail())

    {

        cout << fileName << "not found." << endl;

        exit(1);

    }


    //Populate the command map table.

    commandTable['@'] = 'A';

    commandTable['A'] = 'C';

    commandTable['D'] = 'C';

    commandTable['M'] = 'C';

    commandTable['0'] = 'C';

    commandTable['1'] = 'C';

    commandTable['-'] = 'C';

    commandTable['!'] = 'C';

    commandTable['('] = 'L';

}


bool Parser::hasMoreCommands()

{

    return !fin.eof();

}


void Parser::advance(unsigned long& lineNr)

{

    string currentLine;

    unsigned long commentPos;

    bool commandFound;


    commandFound = false;


    while (!commandFound && getline(fin, currentLine))

    {

        lineNr++;


        //Remove whitespace. 

        currentLine.erase(remove_if(currentLine.begin(), currentLine.end(), ::isspace), currentLine.end());

        

        //Remove comments.

        commentPos = currentLine.find("//");


        //즉 주석문을 찾았다면

        if (commentPos != string::npos)

        {

            currentLine.erase(commentPos, currentLine.length() - commentPos);

        }


        commandFound = !currentLine.empty();

        

    }


    currentCommand = currentLine;

}



char Parser::commandType(unsigned long& lineNr)

{

    if (commandTable.find(currentCommand[0]) != commandTable.end())

    {

        return commandTable[currentCommand[0]];

    }

}

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.

  • 나도메디컬보내줘 · 988782 · 23/02/10 23:41 · MS 2020

    하 이거보니까 컴공 미치도록 가고싶다

  • ✨컴공주✨ · 1052682 · 23/02/10 23:44 · MS 2021

    !!

  • Because of U · 1044347 · 23/02/10 23:41 · MS 2021

    using namespace std;

    정말 오랜만에 보내요!
    예전에 정올 준비 전에 파이썬은 속도가
    너무 느려서 c++로 알고리즘 짜가
    ; 이 세미콜론? 을 안써서 자꾸
    틀리길래 짜증나서 그냥

    머신러닝이나 해야겟다 라는 마인드로
    파이썬으로 정착하자는 마인드를 가지게 됬는데

    여기서 보니 반갑네요 ㅋㅋㅋ

    컴공에선 아직 파이썬이 대중화가 안됬나요?
    물론 한국이 자바+스프링 민국이라 ..
    그리고 C/C++ 이 아무리 근본적인 언어여도

    예전에 개발하다가 아는 분들께 들은건
    몇몇 대학은 이제 파이썬으로 가고 있다고 하셔서
    기분이 너무 좋았는데 아직 C/C++의 왕좌를 이기기엔
    역부족이였던거 같네요 ㅋㅋ

    화이팅하세요!

  • ✨컴공주✨ · 1052682 · 23/02/10 23:44 · MS 2021

    아무래도 요새는 웹으로 대동단결 되는 분위기다보니 저희 홍컴 동기들도 우선 JVM 쪽이나 Java를 먼저 공부하는 것 같아요. 파이썬도 물론 쓰이는 곳 많을 것 같구용... 개인적으로 저는 아직 C/C++을 붙잡고 있는 실정이네요 ㅎㅎ 아무래도 C/C++이 메모리에 직접 접근할 수 있는 강력한 권한을 가지고 있기 때문에 그런 것이 아닌가해요 ㅎㅎ

    응원 감사드립니다 :)

  • Because of U · 1044347 · 23/02/10 23:48 · MS 2021

    아 그래도 자바를 누군가에게 배우신다는게
    저에겐 너무 부럽습니다..

    사실 저는 예전에 형들과 해커톤 나갔을때도
    저 혼자 파이썬이라
    형들이 메인을 구축하고 저는 그저..
    이미 스케치 한 그림에 배경 색칠만 하는 기분이더라구요!

    C/C++ 정말 하면 할수록 어렵고
    하면 할수록 대단한 언어라는걸 체감 할수록
    실력이 느는게 확실히 느껴져서 너무너무 좋은 언어라는건
    자명한 사실인거 같아요!

    대신 .. 처음에 포인터 에서 저 포함
    대부분 C/C++를 처음 다루시는 분들은
    정말 머리가 아프더라구요!

    언젠가 훌륭한 개발자로써 너무너무 실용적인
    프로젝트로 좋은 결과물 내시길 기원합니다!

    항상 화이팅 하세요!

    p.s 혹시 홍컴에도 중국인 같은 분들처럼
    외국인 분들이 많이 재학하시나요?

  • ✨컴공주✨ · 1052682 · 23/02/11 00:18 · MS 2021

    감사드립니다 :) 홍대는 중국인 유학생분들 많이들 오시는 것 같아요 ㅎㅎ 캠퍼스에 은근히 중국말이 많이 들린달까요 ㅎㅎ

  • 컴공 탈주 예과생 · 1187082 · 23/02/10 23:54 · MS 2022

    프로그래밍언어 수업때 파서 만들었었는데
    머리 터지는줄 알았습니다
  • ✨컴공주✨ · 1052682 · 23/02/11 00:18 · MS 2021

    와 프언... 머리 너무 아프죠 ㅠㅠㅠ

  • 컴공 탈주 예과생 · 1187082 · 23/02/11 00:21 · MS 2022

    열심히 하시는걸 보니 좋은 개발자가 되실것 같아요 파이팅~
  • ✨컴공주✨ · 1052682 · 23/02/11 02:29 · MS 2021

    감사드립니다 (__)