그래서 flex/bison에 간단한 C 파서를 만들려고합니다. 함수 및 변수 선언과 구문 분석만을 구문 분석하면됩니다.모든 토큰을 무시하지만 규칙에있는 것들을 무시합니다.
예() I이 .c 파일을 파싱 할 =하면 fopen을 yyin 사용 :
#include <stdio.h>
int main()
{
int firstNumber, secondNumber, sumOfTwoNumbers;
printf("Enter two integers: ");
// Two integers entered by user is stored using scanf() function
scanf("%d %d", &firstNumber, &secondNumber);
// sum of two numbers in stored in variable sumOfTwoNumbers
sumOfTwoNumbers = firstNumber + secondNumber;
// Displays sum
printf("%d + %d = %d", firstNumber, secondNumber, sumOfTwoNumbers);
return 0;
}
파서는 변수 선언으로
int firstNumber, secondNumber, sumOfTwoNumbers;
를 검출하고 있어야 변수를 사용할 때마다 계산하십시오.
나는 이미 그렇게 할 수 있습니다. 문제는 단지 "=, +"토큰 또는 // 주석과 같은 모든 특정 사례를 구문 분석 할 필요가 있지만 파일에있을 수 있습니다.
나는 토큰을 인식 할 수 없을 때 yyparse가 yyerror를 호출하지 않도록 모든 토큰을 무시할 수 있기를 원합니다. 따라서 파일이 구문 분석 될 때만 함수/var 선언에 대한 작업을 수행하고 다른 모든 작업은 EOF까지 부드럽게 실행됩니다. C에서 모든 변수 선언 지정자 및 규정의 목록을 시작, 그래서 당신의 규칙과 같이 보일 수 있습니다 :
나는 몇 년 전부터 고대 웹 사이트를 시작했다. 그러나, 그들은 여전히 살아있다 : [ANSI C 문법, Lex 명세서] (https://www.lysator.liu.se/c/ANSI-C-grammar-l.html)와 [ANSI C Yacc 문법] (https://www.lysator.liu.se/c/ANSI-C-grammar-y.html). 이것은 아마도 "C11 표준 컴파일러"로는 충분하지 않지만 IMHO는 자체 실험을 시작하기에 좋은 소스입니다. (내 자신을 위해, 나는 정말로 그것을지지하지 않을 K & R C 인공물을 없애기 위해 그것을 조금 벗겨 냈다.) – Scheff
한때, 나는이 파서를 마스터하는 것이 가장 힘든 일이었습니다 (나를 위해). 이를 위해 [재 지정 가능 C 컴파일러 : 설계 및 구현] (https://www.amazon.com/David-R-Hanson-Retargetable-Implementation/dp/B008VR0B1M)이 정말 도움이되었습니다. – Scheff