Logicalshift / TameParse

LALR parser with context-sensitive extensions
MIT License
21 stars 2 forks source link

Fail to build C99 parser #6

Open mingodad opened 1 year ago

mingodad commented 1 year ago

After adding _Complex``to the list of reserved words inTameParse/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;
}
mingodad commented 1 year ago

After adding _Imaginary to the list of reserved words and trying to build it with clang15:

c99.cpp:9155:3: error: no matching constructor for initialization of 'const util::syntax_ptr<list_of_Type_Qualifier_n>'
, list_of_Type_Qualifier(list_of_Type_Qualifier_2_2)
  ^                      ~~~~~~~~~~~~~~~~~~~~~~~~~~
../TameParse/Util/syntax_ptr.h:74:25: note: candidate constructor not viable: no known conversion from 'const util::syntax_ptr<class list_of_Type_Qualifier_2_n>' to 'util::syntax_ptr_reference *' for 1st argument
        inline explicit syntax_ptr(syntax_ptr_reference* ref)
                        ^
../TameParse/Util/syntax_ptr.h:89:25: note: candidate constructor not viable: no known conversion from 'const util::syntax_ptr<class list_of_Type_Qualifier_2_n>' to 'const C99::list_of_Type_Qualifier_n *' for 1st argument
        explicit inline syntax_ptr(const ptr_type* value)
                        ^
../TameParse/Util/syntax_ptr.h:94:16: note: candidate constructor not viable: no known conversion from 'const syntax_ptr<class list_of_Type_Qualifier_2_n>' to 'const syntax_ptr<C99::list_of_Type_Qualifier_n>' for 1st argument
        inline syntax_ptr(const syntax_ptr<ptr_type>& copyFrom)
               ^
../TameParse/Util/syntax_ptr.h:81:16: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
        inline syntax_ptr()
               ^
1 error generated.
mingodad commented 1 year ago

Changing the code generated from the parser from:

    class list_of_Type_Qualifier_2_n : public syntax_node {

to:

    class list_of_Type_Qualifier_2_n : public list_of_Type_Qualifier_n {

Then it builds. Does the code generated need to be changed ?

mingodad commented 1 year ago

It builds but fail parsing what it succed with -test at compile time of https://github.com/Logicalshift/TameParse/files/10742335/miniyacc.pp.c.zip :

cat miniyacc.pp.c | ./C99_tp 
Syntax error on line 850, column 17
cat miniyacc.pp.c | ../parsetool/tameparse --enable-lr1-resolver --test -S '<Translation-Unit>' C99.tp
TameParse 0.1.0
mingodad commented 1 year ago

Hello Andrew ! Do you have intention of fix/update/maintain this project ?