-1
bool check_column_name(Token_stream& ts) {
    Token t = ts.get();
    if(t.kind == '(') {
        while(t.kind != ')') {
            t = ts.get();
                if(t.kind == 'a' || t.kind == '0') {
                    string column_names = "";
                    while(t.kind != ' ' && t.kind != ')') {
                        column_names += t.value;
                        t = ts.get();
                }
                cout << column_names << endl;
            }
        }
        return true;
    }
}

我需要解析这个

(Column_name1 VARCHAR[20], Column_name2 VARCHAR[8], Column_name3 INTEGER);

我需要解析上面的行来调用 Create() 函数来创建一个表。解析该行后,我将能够知道我的列名将是什么,我的表中有多少列以及每列的类型是什么。例如,第一列的名称为“Column_name1”,其类型为“VARCHAR”,它是一个字符串。我的代码能够解析 (column_name1 Column_nam2) 但这不是我想要的。我想解析行 (Column_name1 VARCHAR[20], Column_name2 VARCHAR[8], Column_name3 INTEGER);。

4

1 回答 1

3

以正确的方式做到这一点是一个复杂的主题。它涉及对语法、词法分析器、解析器等的熟悉。

这方面最著名的书是《龙书》。

为此,我过去曾成功地将ANTLR与 C++ 结合使用。

于 2013-09-14T19:07:01.623 回答