이 질문은 gcc 내부에 초점을 맞추고 있습니다. 나는 gcc generic trees를 실험하고있다. 이 작은 프로젝트는 교육 목적으로 하드 코드 된 프런트 엔드를 컴파일하는 것에 관한 것입니다. printf를 외부에서 호출 할 수 있었으며 테스트 메시지를 인쇄 할 수있는 실행 파일을 컴파일 할 수있었습니다. 후자는 필자가 함수에 대한 인수를 준비 할 수
소스 코드에서 Ocaml을 컴파일 할 때 /boot/ocamlc을 사용하여 .ml 파일을 컴파일합니다. 그래서 ocaml은 자체적으로 ocamlc를 사용하여 빌드합니다. 첫 번째 ocamlc 파일의 출처는 어디입니까? 첫 번째 ocamlc 바이너리를 /boot/ocamlc없이 컴파일하려면 어떻게해야합니까?
Swift 컴파일러 (swiftc -dump-ast)가 생성 한 AST 덤프를 구문 분석하는 ANTLR 4 문법을 작성하고 있습니다. 예제 Swift 프로그램과 아래의 해당 AST 덤프를 참조하십시오. 불행히도 bug in the compiler으로 인해 덤프에 불균형 괄호가 포함될 수 있습니다 (일부 트리 노드에는 닫는 괄호가 없습니다). treeNode
내 작업 FIRST를 계산하고 다음과 같은 문법 세트를 따르는 것입니다 설정 : P ::= S CS .
S ::= (int , int)
CS ::= C CS | epsilon
C ::= left int | right int | low C
내가받은 다음 첫 번째 세트 : 내가 계산 한 다음 세트 FIRST(S) = {'('}
FIRST(C) = {
int i = 10, j = 5, k;
k = f(++i) + g(++i) + j+ 25;
f(++i) 또는 g(++i)이 먼저 계산됩니까? 프로그램을 실행하지 않고 어떻게 알 수 있습니까? f 가정 및 순서 변경이 컴파일러에 따라 않는 방법 g는 int f(int a)
{ return a; }
유사하다?
어셈블리 및 C++을 사용하여 언어를 작성하는 데 필요한 리소스와 지식이있는 것으로 가정하고 컴파일러를 작성하는 방법은 무엇입니까? 더 구체적으로 나는 컴파일과 링크 측면에 대해 더 알고 싶다. Visual Studio의 Microsoft 컴파일러는 모든 기타 검사가 완료된 후 즉시 프로그램 내의 모든 작성된 코드를 컴파일, 어셈블 및/또는 링크합니다. 내
나는 현재 행복 언어 & Alex를 사용하여 장난감 언어 의 컴파일러에 대한 파서를 작성하고 있습니다. 선택적 레이아웃의 일부 형식이 필요하기 때문에 비 -과 일치하기 전에 Alex의 상태를 변경해야합니다. 불행히도 해피가 요구하는 미리보기 토큰은 전에 읽은 것 같습니다 알렉스의 상태를 변경할 수있는 기회가 있습니다. 이 문제에 대한 일반적인 접근 방식은
내 컴파일러 과정에 대한 의미 론적 분석을 할 때 혼란스러운 경우가 발생했습니다. #include <stdio.h>
int a = "abcd"[2];
int main()
{
char b = "abcd"[2];
printf("%d\n%c\n", a, b);
return 0;
}
GCC는 변수 "a"에 대해 "오류