「AOJよく使うコード」の編集履歴(バックアップ)一覧はこちら
「AOJよく使うコード」(2013/02/15 (金) 12:03:41) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
再帰下降構文解析のスケルトン。
int saiki(std::string formula,int& p,int pr){
int re,a;
while(formula.size()>p){
char c=formula[p];
if(c=='('){
p++;
re=saiki(formula,p,0);
p++;
}else if(c==')'){
return re;
}else if(c=='+' || c=='-'){
if(pr>=1){
return re;
}
p++;
a=saiki(formula,p,1);
//ここに計算を書く
}else if(c=='*'){
if(pr>=2){
return re;
}
p++;
a=saiki(formula,p,2);
//ここで計算を行う
}else if(c=='/'){
if(pr>=2){
return re;
}
p++;
a=saiki(formula,p,2);
//ここで計算を行う
}else{
//変数の読み込み
std::string str="";
int k=0;
while(formula[k+p]!='\0'){
str+=formula[k+p];
k++;
}
p=p+k+1;
}
}
return re;
}
再帰下降構文解析のスケルトン。
int saiki(std::string formula,int& p,int pr){
int re,a;
while(formula.size()>p){
char c=formula[p];
if(c=='('){
p++;
re=saiki(formula,p,0);
p++;
}else if(c==')'){
return re;
}else if(c=='+' || c=='-'){
if(pr>=1){
return re;
}
p++;
a=saiki(formula,p,1);
//ここに計算を書く
}else if(c=='*'){
if(pr>=2){
return re;
}
p++;
a=saiki(formula,p,2);
//ここで計算を行う
}else if(c=='/'){
if(pr>=2){
return re;
}
p++;
a=saiki(formula,p,2);
//ここで計算を行う
}else{
//変数や自然数の読み込み
}
}
return re;
}