-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

これを適切な方法で行うことは、複雑な問題です。文法、レクサー、パーサーなどに精通している必要があります。

この主題に関する最も有名な本は「ドラゴンブック」です。

これには、過去に C++ でANTLRを使用することに成功しました。

于 2013-09-14T19:07:01.623 に答える