저는 모바일 게임입니다. 지금은 게임 엔진입니다. 엔진이기 때문에 상층에 추상적인 것을 제공해야 한다. 여기서는 스크립트 시스템을 소개했습니다.
이 스크립트 시스템에는 기본 입/출력, 4 개의 연산, 시스템 함수 호출, 함수 선언, 호출 등 실제 필요에 따라 직접 설계한 명령 집합이 포함되어 있습니다 (Lua 또는 다른 게임 스크립트를 사용해 본 경우 알 수 있음). 전체 구조에는 명령어 세트, 컴파일러, 가상 시스템 등이 포함됩니다. 이런 식으로 엔진은 그림 그리기, 위치 계산 등과 같은 몇 가지 기본적인 서비스를 제공합니다. , 그리고 스크립트는 게임을 매우 간단하게 제어 할 수 있습니다. 심지어 새로운 게임을 빠르게 만들 수도 있습니다. 뇌신의 망치 엔진을 아시죠?
여기 계산기 애플릿이 있습니다. EBNF 이론을 적용하고 표현식을 지원합니다. 예를 들면 (2+3*6)*4+4 입니다. 그것의 단순함을 경험하고 자신에게 힘을 주다.
/*
EBNF 기반 단순 정수 연산 계산기
& ltexp & gt-& gt;; & ltterm & gt {& ltaddop & gt & ltterm & gt}
& ltaddop & gt-& gt;; +|-
& ltterm & gt-& gt;; & lt 계수>{ & ltmulop & gt& lt 계수>}
& ltmulop & gt-& gt;; *
& lt 계수 & gt-& gt;; (& ltexp & gt)| 숫자
Stdin 에서 문자 행을 입력합니다
오류 또는 결과를 출력합니다.
*/
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltctype.h & gt
Char 토큰 /* 글로벌 토큰 변수 */
/* 재귀적으로 호출되는 함수 프로토타입 */
Intexp (void);
Intterm (void);
Int 계수 (void);
잘못된 오류 (void)
{
Fprintf(stderr, "error \ n");
종료 (1);
}
잘못된 일치 (예상 문자)
{
If (token = = expected token) token = getchar ();
Elseerror ();
}
주 ()
{
Int 결과
토큰 = getchar (); /* 선행 문자가 있는 태그 로드 */
Result = exp ();
If(token = =' \ n ')/* 줄 끝 확인 */
Printf("Result = %d\n ",결과);
Elseerror (); /* 행의 관련 없는 문자 */
0 을 반환합니다
}
Int exp(void)
{
Inttemp = term ();
While ((토큰 = ='+') | | (토큰 = ='-'))
스위치 (토큰)
{
대/소문자 "+":
일치 ('+');
Temp+= term ();
깨뜨리다
대/소문자'-':
일치 ('-');
Temp-= term ();
깨뜨리다
}
반환 온도
}
내부 기간 (부적합)
{
Inttemp = factor ();
While (토큰 = =' *')
{
일치 ('*');
Temp * = factor ();
}
반환 온도
}
정수 계수 (비어 있음)
{
내부 온도
If (토큰 = =' (') {
일치 ('(');
Temp = exp ();
Match (')');
}
Elseif (isdigit (토큰)) {
Ungetc (토큰, stdin);
Scanf("%d ",& amptemp);
토큰 = getchar ();
}
Elseerror ();
반환 온도
}
사실 프로그래밍을 어느 정도 배우면 항상 방향이 없다. 당신은 항상 다음 단계에서 C/C++ 를 어떻게 배우는지 묻습니다. 당신은 이미 이 언어를 마스터했다고 생각합니다. 사실 네가 부족한 것은 바로 이런 부드러운 것들이고, 부족한 것은 이론이다.
컴파일 원리는 단일 이론이 아니며 일반 표현식, BNF, EBNF, 구문 분석 트리, 구문 트리 및 많은 런타임 환경과 같은 다른 많은 지식을 배울 수있는 작은 영역을 다룹니다.
이것들은 너에게 매우 풍성한 보답을 가져다 준다. 말을 많이 하지 않고, 운행을 배우면 C++ 언어 자체에 대한 이해가 깊어진다.
만약 네가 좋은 발전을 원한다면, 너는 공부하는 것이 좋겠다.