use v6-alpha; grammar v6::Grammar::Native; use v6::AST; use v6::AST::Native; # See also: 'CapInternals.hs' #361 in Pugs source # See also: 'grammar_rules.pg' in Parrot source # # Int, Buf, Cplx are not parsed at the token level # # for example, -3 is parsed as '-','3' because there are some operators with # tighter precedence than '-'. # # 3i is parsed as '3', 'i' - postfix 'i' makes imaginary numbers # # also, tokens like 'Inf' don't check for end-of-the word, # and this could cause a misparse of the word 'Infinity'. # This is fixed later by the 'longest-token' rule token num { | 0 [ [ b <[01]>+ [ _ <[01]>+ ]* | o <[0..7]>+ [ _ <[0..7]>+ ]* | x <[0..9a..fA..F]>+ [ _ <[0..9a..fA..F]>+ ]* | d \d+ [ _ \d+]* | \d+[_\d+]* [ \. \d+[_\d+]* [ <[Ee]> <[+\-]>? \d+ ]? { return v6::AST::node( $/, v6::AST::NFloat ) } | { return v6::AST::node( $/, v6::AST::NUint ) } ] ] | { return v6::AST::node( $/, v6::AST::NBit ) } ] | 1 [ \d+[_\d+]* [ \. \d+[_\d+]* [ <[Ee]> <[+\-]>? \d+ ]? { return v6::AST::node( $/, v6::AST::NFloat ) } | { return v6::AST::node( $/, v6::AST::NUint ) } ] | { return v6::AST::node( $/, v6::AST::NBit ) } ] | \d+[_\d+]* [ \. \d+[_\d+]* [ <[Ee]> <[+\-]>? \d+ ]? { return v6::AST::node( $/, v6::AST::NFloat ) } | { return v6::AST::node( $/, v6::AST::NUint ) } ] | \. \d+[_\d+]* [ <[Ee]> <[+\-]>? \d+ ]? { return v6::AST::node( $/, v6::AST::NFloat ) } | Inf { return v6::AST::node( $/, v6::AST::IInfinite ) } | NaN { return v6::AST::node( $/, v6::AST::INotANumber ) } } token str { ' ( [ \\' | <-[']> ]* ) ' { return v6::AST::node( $/[0], v6::AST::NStr ) } } # - there is no parsetime 'bool' # # the only way to get parsetime bool is # constant bool $x = True # or # my bool $x; BEGIN { $x = False } # # token bool { # [ True | False ] # { return $/ does v6::AST::NBool) } # }