所以我有这个递归下降解析器工作正常,通过命令行参数识别和使用值,但我不知道如何将此端口从.dat文件读取,使用正确的字符指针,打印字符串,并为多个字符串工作。通过ifstream的字符指针和字符串
使用分析器命令行参数:
#include <iostream>
#include <fstream>
using namespace std;
bool A(void);
bool E(void);
bool T(void);
bool F(void);
bool P(void);
bool I(void);
bool L(void);
char *c;
int main(int argc, char *argv[]){
c = argc == 2 ? argv[1] : (char *)"";
if (A() && *c == '\0') {
cout << "The string \"" << argv[1] << "\" is in the language." << endl;
}
else {
cout << "The string \"" << argv[1] << "\" is not in the language." << endl;
}
return 0;
}
bool A(void){
if(I())
{
if (*c == '='){
++c;
if (E())
return true;
}
}
return false;
}
bool E(void){
if(T()){
if (*c == '+' || *c == '-'){
++c;
return E();
}
return true;
}
return false;
}
bool F(void){
if(P()){
if(*c == '^'){
++c;
return F();
}
return true;
}
return false;
}
bool I(void){
if (*c >= 'a' && *c <= 'z'){
++c;
return true;
}
return false;
}
bool L(void){
if (*c >= '0' && *c <= '9'){
++c;
return true;
}
return false;
}
bool P(void){
if (I()){
return true;
}
else
if (L()){
return true;
}
else
if (*c == '('){
++c;
if (E()){
if (*c == ')'){
++c;
return true;
}
}
}
return false;
}
bool T(void){
if(F()){
if (*c == '*' || *c == '/'){
++c;
return T();
}
return true;
}
return false;
}
我不知道我可以代替的argv [1]打印字符串。 为了得到正确的字符指针,我可以这样做吗?
ifstream fin("input.dat");
while (fin >> *c)
当我尝试我得到分段错误。
你确实需要学习使用丰富的函数名称。 – GWW 2011-03-24 02:08:41
它们是完全任意的名字,看它的语法如何,除了这个练习之外,不会使用任何其他的语法。 – 2011-03-24 02:13:17
为什么要使用指针,您正在使用全局变量。 – 2011-03-24 02:17:33