Skip to content

Fail to build C99 parser #6

@mingodad

Description

@mingodad

After adding _Complex``to the list of reserved words in TameParse/Compiler/OutputStages/cplusplus.cpp` and trying to build the C99 parser from C99.tp we get this error:

c99.cpp: In constructor ‘C99::Direct_Declarator_n::Direct_Declarator_n(const util::syntax_ptr<C99::Direct_Declarator_n>&, const util::syntax_ptr<C99::_opensquare__n>&, const util::syntax_ptr<C99::list_of_Type_Qualifier_2_n>&, const util::syntax_ptr<C99::static_n>&, const util::syntax_ptr<C99::Assignment_Expression_n>&, const util::syntax_ptr<C99::_closesquare__n>&)’:
c99.cpp:9158:32: error: no matching function for call to ‘util::syntax_ptr<C99::list_of_Type_Qualifier_n>::syntax_ptr(const util::syntax_ptr<C99::list_of_Type_Qualifier_2_n>&)’
 9158 | , _closesquare_(_closesquare__5) {
      |                                ^
In file included from c99.h:9,
                 from c99.cpp:6:
../TameParse/Util/syntax_ptr.h:94:16: note: candidate: ‘util::syntax_ptr<ptr_type>::syntax_ptr(const util::syntax_ptr<ptr_type>&) [with ptr_type = C99::list_of_Type_Qualifier_n]’
   94 |         inline syntax_ptr(const syntax_ptr<ptr_type>& copyFrom)
      |                ^~~~~~~~~~
../TameParse/Util/syntax_ptr.h:94:55: note:   no known conversion for argument 1 from ‘const util::syntax_ptr<C99::list_of_Type_Qualifier_2_n>’ to ‘const util::syntax_ptr<C99::list_of_Type_Qualifier_n>&’
   94 |         inline syntax_ptr(const syntax_ptr<ptr_type>& copyFrom)
      |                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
../TameParse/Util/syntax_ptr.h:89:25: note: candidate: ‘util::syntax_ptr<ptr_type>::syntax_ptr(const ptr_type*) [with ptr_type = C99::list_of_Type_Qualifier_n]’
   89 |         explicit inline syntax_ptr(const ptr_type* value)
      |                         ^~~~~~~~~~
../TameParse/Util/syntax_ptr.h:89:52: note:   no known conversion for argument 1 from ‘const util::syntax_ptr<C99::list_of_Type_Qualifier_2_n>’ to ‘const C99::list_of_Type_Qualifier_n*’
   89 |         explicit inline syntax_ptr(const ptr_type* value)
      |                                    ~~~~~~~~~~~~~~~~^~~~~
../TameParse/Util/syntax_ptr.h:81:16: note: candidate: ‘util::syntax_ptr<ptr_type>::syntax_ptr() [with ptr_type = C99::list_of_Type_Qualifier_n]’
   81 |         inline syntax_ptr()
      |                ^~~~~~~~~~
../TameParse/Util/syntax_ptr.h:81:16: note:   candidate expects 0 arguments, 1 provided
../TameParse/Util/syntax_ptr.h:74:25: note: candidate: ‘util::syntax_ptr<ptr_type>::syntax_ptr(util::syntax_ptr_reference*) [with ptr_type = C99::list_of_Type_Qualifier_n]’
   74 |         inline explicit syntax_ptr(syntax_ptr_reference* ref)
      |                         ^~~~~~~~~~
../TameParse/Util/syntax_ptr.h:74:58: note:   no known conversion for argument 1 from ‘const util::syntax_ptr<C99::list_of_Type_Qualifier_2_n>’ to ‘util::syntax_ptr_reference*’
   74 |         inline explicit syntax_ptr(syntax_ptr_reference* ref)
      |                                    ~~~~~~~~~~~~~~~~~~~~~~^~~

Build script:

../parsetool/tameparse --enable-lr1-resolver -o c99 -S '<Translation-Unit>' C99.tp
g++ -DHAVE_CONFIG_H -I. -I..  -O2 -g -o c99_tp c99_main.cpp c99.cpp ../TameParse/.libs/libTameParse.so -Wl,-rpath -Wl,/home/mingo/local/tameparse/lib

c99_main.cpp:

//
// Simple JSON formatter, reads from stdin and writes a pretty-printed version
// to stdout
//

#include <iostream>
#include <string>
#include "c99.h"

using namespace std;

//
// Parses stdin as C99
//
int main(int argc, const char** argv) {
    // Create the parser - unicode from wcin
    C99::state* parser = C99::create_Translation_Unit<wchar_t>(wcin);

    // Generate the AST
    bool success = parser->parse();

    if (!success) {
        // Report syntax error
        if (parser->look().item()) {
            // The lookahead contains the symbol that generated the error
            cerr << "Syntax error on line " << parser->look()->pos().line() << ", column " << parser->look()->pos().column() << endl;
        } else {
            // No lookahead: file is incomplete
            cerr << "Syntax error: unexpected end of file" << endl;
        }

        // Abort if there's an error
        return 1;
    }

    // Exit success
    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions