Loading ...
Sorry, an error occurred while loading the content.

Re: [antlr-interest] infinite recursion

Expand Messages
  • Sinan
    ... I can t see a finite sentence satisfying the above productions. Any sentence must start with K ( there is no other reduction.) And once you see a K then it
    Message 1 of 3 , Apr 11 11:16 AM
    View Source
    • 0 Attachment
      lazimolmaz wrote:
      >
      > Hi,
      >
      > How do I arrangement following rules for antlr ?
      >
      > a: b | c ;
      >
      > b: K a ;
      >
      > c: a b
      > | a X b
      > | a Y b
      > | a Z b
      > ;
      >

      I can't see a finite sentence satisfying the above productions.

      Any sentence must start with K ( there is no other reduction.)

      And once you see a K then it MUST be followed with an 'a' .
      But the only way a an 'a' can be a follow is that , it must start with
      a K. So the recursion never ends.

      However the rules could be contracted as:

      a : K a | K a ( X | Y | Z )? K a ;

      or

      a : K a ( X | Y | Z )? K a ;

      which will parse a countably infinite K's possibly followed by a ( X | Y
      | Z )?
      and another countably infinite K's , countably infinite times, which
      still leaves it as only countably infinite, but nevertheless hard on the
      computing resources, if not your patience.

      Maybe you meant

      c: /* empty */
      | a b
      | a X b
      | a Y b
      | a Z b
      ;

      Or

      a: b | c | ;

      Or

      b: K
      | K a
      ;

      Or maybe I am wrong....

      Sinan
    • lazimolur2@yahoo.com
      ... with ... X | Y ... on the ... Thanks for answer. Sorry, there is a few translation error in my question. I m sending real question and errors
      Message 2 of 3 , Apr 11 12:52 PM
      View Source
      • 0 Attachment
        --- In antlr-interest@y..., Sinan <sinan.karasu@b...> wrote:
        > lazimolmaz wrote:
        > >
        > > Hi,
        > >
        > > How do I arrangement following rules for antlr ?
        > >
        > > a: b | c ;
        > >
        > > b: K a ;
        > >
        > > c: a b
        > > | a X b
        > > | a Y b
        > > | a Z b
        > > ;
        > >
        >
        > I can't see a finite sentence satisfying the above productions.
        >
        > Any sentence must start with K ( there is no other reduction.)
        >
        > And once you see a K then it MUST be followed with an 'a' .
        > But the only way a an 'a' can be a follow is that , it must start
        with
        > a K. So the recursion never ends.
        >
        > However the rules could be contracted as:
        >
        > a : K a | K a ( X | Y | Z )? K a ;
        >
        > or
        >
        > a : K a ( X | Y | Z )? K a ;
        >
        > which will parse a countably infinite K's possibly followed by a (
        X | Y
        > | Z )?
        > and another countably infinite K's , countably infinite times, which
        > still leaves it as only countably infinite, but nevertheless hard
        on the
        > computing resources, if not your patience.
        >
        > Maybe you meant
        >
        > c: /* empty */
        > | a b
        > | a X b
        > | a Y b
        > | a Z b
        > ;
        >
        > Or
        >
        > a: b | c | ;
        >
        > Or
        >
        > b: K
        > | K a
        > ;
        >
        > Or maybe I am wrong....
        >
        > Sinan

        Thanks for answer.

        Sorry, there is a few translation error in my question.

        I'm sending real question and errors

        table_reference
        : table_primary
        | joined_table
        ;

        table_primary
        : table_or_query_name
        ( ( "as" )? correlation_name ( LPAREN
        derived_column_list RPAREN )? )?
        | derived_table
        ( "as" )? correlation_name ( LPAREN
        derived_column_list RPAREN )?
        | lateral_derived_table ( "AS" )? correlation_name
        ( LPAREN derived_column_list RPAREN )?
        | collection_derived_table ( "AS" )? correlation_name
        ( LPAREN derived_column_list RPAREN )?
        | only_spec
        ( ( "AS" )? correlation_name
        ( LPAREN derived_column_list RPAREN )? )?
        | LPAREN joined_table RPAREN
        ;

        only_spec
        : "ONLY" LPAREN table_or_query_name RPAREN
        ;

        lateral_derived_table
        : "LATERAL" LPAREN query_expression RPAREN
        ;

        collection_derived_table
        : "UNNEST" LPAREN collection_value_expression RPAREN
        ( "WITH" "ORDINALITY" )?
        ;

        derived_table
        : table_subquery
        ;

        table_or_query_name
        : table_name
        | query_name
        ;

        derived_column_list
        : column_name_list
        ;

        column_name_list
        : column_name ( COMMA column_name )*
        ;

        //---7.7--------------------------------------------------------------
        ---------

        joined_table
        : cross_join
        | qualified_join
        | natural_join
        | union_join
        ;

        cross_join
        : table_reference "CROSS" "JOIN" table_primary
        ;

        qualified_join
        : table_reference ( join_type )? "JOIN" table_reference
        join_specification
        ;

        natural_join
        : table_reference "NATURAL" ( join_type )? "JOIN"
        table_primary
        ;

        union_join
        : table_reference "UNION" "JOIN" table_primary
        ;

        join_specification
        : join_condition
        | named_columns_join
        ;

        join_condition
        : "ON" search_condition
        ;

        named_columns_join
        : "USING" LPAREN join_column_list RPAREN
        ;

        join_type
        : "INNER"
        | outer_join_type ( "OUTER" )?
        ;

        outer_join_type
        : "LEFT"
        | "RIGHT"
        | "FULL"
        ;

        join_column_list
        : column_name_list
        ;



        infinite recursion to rule joined_table from rule table_reference
        infinite recursion to rule joined_table from rule cross_join
        infinite recursion to rule joined_table from rule joined_table
        infinite recursion to rule joined_table from rule qualified_join
        infinite recursion to rule joined_table from rule joined_table
        infinite recursion to rule joined_table from rule natural_join
        infinite recursion to rule joined_table from rule joined_table
        infinite recursion to rule joined_table from rule union_join
        infinite recursion to rule joined_table from rule joined_table
        infinite recursion to rule joined_table from rule non_join_query_term
        infinite recursion to rule joined_table from rule
        non_join_query_expression
        infinite recursion to rule joined_table from rule
        non_join_query_expression
        infinite recursion to rule joined_table from rule
        query_expression_body
        infinite recursion to rule joined_table from rule
        query_expression_body
        infinite recursion to rule joined_table from rule query_expression
        infinite recursion to rule joined_table from rule from_subquery
        infinite recursion to rule joined_table from rule
        insert_columns_and_source
        infinite recursion to rule joined_table from rule insert_statement
        infinite recursion to rule joined_table from rule query_expression
      Your message has been successfully submitted and would be delivered to recipients shortly.