<div>오늘은 <b>식별자 </b>입니다.</div> <div>영어로는 identifier</div> <div>일반적으로 식별자는 개체를 구분하기 위한 것으로 <span style="font-size:9pt;line-height:1.5;">유일성을 띄게 됩니다.</span></div> <div><span style="font-size:9pt;line-height:1.5;">그렇기에 동일 이름으로 변수나 함수를 선언할 수 없는 것이죠</span></div> <div><span style="font-size:9pt;line-height:1.5;">(물론 동일 이름으로 변수를 쓰면 배열, 동일 이름으로 함수를 쓰면 상속... 라고 할수도 있겠지만..)</span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;">그리고 이러한 식별자가 왜 필요하냐/왜 존재하냐면</span></div> <div>1. 사람이 구분하려고</div> <div>2. 컴퓨터가 구분하려고</div> <div>두가지 이유료 존재합니다.</div> <div><br></div> <div>사람이 편하게 구분하기 위함은</div> <div>기호화됨으로서 의미 파악이 쉽기 때문이고(<b>mnemonics</b>)</div> <div><br></div> <div>컴퓨터가 구분하기 위함은</div> <div>이것이 특정 의미를 지킨 명령어(키워드/keyword)인지 아니면 사용자가 추가한 어떠한 식별자 인지를 알아내기 위함입니다.</div> <div>식별자 중에 프로그래밍 문법에 미리 정해 놓은것은</div> <div>reserved word 혹은 <b>keyword </b>라고 하며</div> <div>프로그래밍 언어 기준으로 if / else / elif / while / for 등등등 이런 문법에서 다루는 것들입니다.</div> <div><br></div> <div>정해져 있음으로 사람이 언어를 배우는데 편리성을 꾀할뿐 아니라</div> <div>소스코드를 컴퓨터 언어로 번역하는데 있어 행동을 제한함으로서 프로그래밍이라는 것을 존재케 합니다.</div> <div><br></div> <div>>>> 사족</div> <div>만약 변수명이라는게 존재하지 않는 다면</div> <div>모든 변수를 메모리의 번지(즉, 포인터)로 숫자놀음을 해야 합니다!!!</div> <div><br></div> <div>>>> 사족</div> <div>컴퓨터는 기본적으로 <b>finite state machine</b>(유한 상태머신)이라는 수학적 모델을 따르며</div> <div><b>A라는 상태에서 입력 I에 의해 B라는 상태로 바뀌어 또 다른 입력을 기다릴 뿐</b>인 단순한 기계 입니다.</div> <div>즉, 아무것도 입력되지 않은 상태(A)에서 if라는 입력이 들어오면 ()로 쌓여진 조건식이 들어오는 것을 정상으로 받아 들이는</div> <div>상태변환 목록을 지니고 있고, if는 이러한 입력으로 작용하기에 정해져 있는것이 판단에 용이합니다.</div> <div><br></div> <div><br></div> <div>소스코드를 분석하는데 있어</div> <div>tokenizer라는 녀석은 단어 단위로 토막을 내며</div> <div>토막난 단어들을 어휘별로 분석하여 내용이 식별자(변수/함수명)인지 숫자인지 키워드인지를 구분합니다.</div> <div><br></div> <div>파싱의 경우 <b>왼쪽 우선/오른쪽 우선</b> 방법이 있으며</div> <div><b>사람</b>처럼 <b>문장을 한번에 파악</b>할 수 있는 능력이 있는것이 아니기에</div> <div> <ul><li><span style="font-size:9pt;line-height:1.5;">현재 상태</span></li> <li><span style="font-size:9pt;line-height:1.5;">새로운 데이터</span></li></ul></div> <div><b>단 두개의 데이터</b> 만을 가지고 소소코드를 분석해 나가기에</div> <div>사람처럼 하나의 단어를 직관적으로 분석하려면</div> <div> <ul><li><span style="font-size:9pt;line-height:1.5;">현재 상태</span></li> <li><span style="font-size:9pt;line-height:1.5;">이전 데이터</span></li> <li><span style="font-size:9pt;line-height:1.5;">새로운 데이터</span></li></ul></div> <div>에 추가로 token 전체의 데이터를 뒤에서 부터 읽거나 앞에서 다시 읽거나 하는 번거로움이 있기 때문에</div> <div><span style="font-size:9pt;line-height:1.5;">식별자는 숫자가 아닌 영문이나 _ 로 시작을 하게 구성이 됩니다.</span></div> <div><span style="font-size:9pt;line-height:1.5;">예를 들어</span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;">a12는</span></div> <div><span style="font-size:9pt;line-height:1.5;">식별시작 -> a -> 식별자인식모드 -> 1 -> </span><span style="font-size:9pt;line-height:1.5;">식별자인식모드 -></span><span style="font-size:9pt;line-height:1.5;"> 2 -> </span><span style="font-size:9pt;line-height:1.5;">식별자인식모드 -></span><span style="font-size:9pt;line-height:1.5;"> </span><span style="font-size:9pt;line-height:1.5;">입력끝</span></div> <div>의 순서를 밟아 식별자로 인식이 되며</div> <div><br></div> <div>12a는</div> <div>식별시작 -> 1 -> 숫자인식모드 -> 2 -> 숫자인식모드 -> a -> 에러</div> <div>의 순서를 밟게 됩니다.</div> <div>물론 000b 와 같이 2진수로 인식하는 예외도 존재할 수는 있으나</div> <div>이렇게 되면 숫자인지 식별자인지 알기가 까다로워 지니 유용하지 않아 집니다.</div> <div>(그럼 식별자가 b나 h나 d로 끝나면 숫자로 해야 한다거나.. 경우의 수가 증가함)</div> <div><br></div> <div><br></div> <div>>>> 사족</div> <div>예전 지인을 도와주려다가 알게 된녀석으로 <span style="font-size:9pt;line-height:1.5;">antlr 라는 것을 통해 파서를 구현할 수 있습니다.</span></div> <div>그리고 이쁘게~ 그림도 그려주죠.</div> <div>unaryExpression 이라는 상태에서 * / %는 반복적으로 입력후 unaryExpression을 입력받는 것이 가능하며</div> <div><span style="font-size:9pt;line-height:1.5;">* / % 외에 다른 입력이 오면 다른 상태로 바뀌는 의미를 지닙니다.</span></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201507/1436918692ZOYNbI7jxWYQ5iasRFMzLU7vrcZn9AkU.png" width="769" height="214" alt="antlr_ide_plugin_10.PNG" style="border:none;"></div><br></div> <div>나중에 관심있으신분은 BNF(Backus–Naur form / Backus–Normal form)과</div> <div>악의 축(!) 촘스키 선생에 대해서도 알아 보시기 바랍니다.</div> <div>[링크 : <a target="_blank" href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form" target="_blank">https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form</a>]<br>[링크 : <a target="_blank" href="https://en.wikipedia.org/wiki/Chomsky_normal_form" target="_blank">https://en.wikipedia.org/wiki/Chomsky_normal_form</a>]</div> <div><br></div> <div><br></div> <div><br></div> <div><b>한줄결론</b></div> <div>괜히 변수명/함수명이 영어나 _로 시작하는게 아니다</div> <div><br></div> <div><br></div> <div>+</div> <div> <ul><li><span style="font-family:'굴림', gulim, '돋움', Dotum, Helvetica, AppleGothic, sans-serif;font-size:9pt;line-height:1.5;"><a target="_blank" href="http://todayhumor.com/?programmer_12065" target="_blank">프로그래밍 언어란</a></span></li> <li><font face="굴림, gulim, 돋움, Dotum, Helvetica, AppleGothic, sans-serif"><a target="_blank" href="http://todayhumor.com/?programmer_12087" target="_blank">프로그래밍 언어의 종류와 구성</a></font></li></ul></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.