C 언어로 eval 바람 함수
소개
eval
함수는 문자열을 표현식으로 평가하는 함수입니다. eval
는 C 언어와 같은 컴파일러 언어에는 거의 없지만 JavaScript와 같은 인터프리터 언어에서 일반적입니다. 여기에서는 C 언어의 문자열을 수식으로 처리하는 eval
바람 함수를 만듭니다. 소스 코드는 GitHub에 있습니다.주요 사양
eval
는 인수의 수식을 계산하고 결과를 반환 값으로 사용하는 함수로 만듭니다. eval
에서는 sin
, exp
, sqrt
등의 math.h
에 있는 함수를 사용할 수 있도록 합니다. 함수를 포함한 수식의 계산 순서는 다음과 같습니다. 계산 과정은 모두 문자열로서 처리를 실시합니다.sin
, exp
, sqrt
등 (
, )
*
, \
+
, -
함수 계산
calcfunc
, 사칙 연산 calc
을 만듭니다. 괄호를 처리하려면 eval
를 사용합니다. 프로그램의 의사 코드(?)와 함께 설명합니다. 실제 소스 코드는 길기 때문에 GitHub을 참조하십시오. 구현은 기본적으로 간단하며 위의 글머리 기호의 순서대로 계산하기만 하면 됩니다.double eval(char *str) {
for ( 文字列先頭からループ ) {
if ( 関数があった時 ) {
str2 = 関数とその引数;
str3 = num2str(calcfunc(str2));
str = str2 を str3 に置換;
}
}
for ( 文字列先頭からループ ) {
if ( 括弧があった時 ) {
str2 = 括弧内の文字列;
str3 = num2str(eval(str2));
str = (str2) を str3 に置換;
}
}
for ( 文字列先頭からループ ) {
if ( *, / があった時 ) {
str2 = 計算範囲;
str3 = num2str(calc(str2));
str = str2 を str3 に置換;
}
}
for ( 文字列先頭からループ ) {
if ( +, - があった時 ) {
str2 = 計算範囲;
str3 = num2str(calc(str2));
str = str2 を str3 に置換;
}
}
return atof(str);
}
처리 흐름의 예
인수에
3*sqrt(4)+(5-2)
로 했을 때를 예로 해 설명합니다. 우선 편리함을 위해 전체에 (
, )
를 붙입니다.그런 다음 계산 순서대로 함수를 호출하여 계산합니다.
다음으로
*
, \
에 의한 계산은 calc
를 이용해 실시합니다. 마지막으로 +
, -
에 의한 계산을 실시합니다. 최종적으로 남은 값을 실수치로서 return
합니다.정리・향후
C 언어에 대한
eval
바람 함수를 만들었습니다. calc
같은 함수에 대해 언급하지 않았지만 설명을 추가 할 수 있습니다. 꼭 구문 분석 등의 공부에 도움이 된다고 생각합니다. 향후의 과제로서 메모리를 많이 사용하는 처리 속도가 느린 등을 들 수 있으므로 개선하고 싶습니다. 또한 버그가 있을 수도 있습니다.문헌
Reference
이 문제에 관하여(C 언어로 eval 바람 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Daiji256/items/09fa042e94907a232c57텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)