+
Point of view
All features
class PACKRAT_GRAMMAR
Summary
The packrat grammar written using the packrat parser :-)
Note that the original grammar is extended with "tags" which will allow the implementation of semantic actions. The grammar is:
grammar <- (nonterminal '<-' sp pattern)+ pattern <- alternative ('/' sp alternative)* alternative <- ([!&] sp suffix / suffix tag?)+ suffix <- primary ([*+?] sp)* primary <- '(' sp pattern ')' sp / '.' sp / literal /
               charclass / nonterminal !'<-'
literal     <- ['] (!['] .)* ['] sp
charclass   <- '[' (!']' (. '-' . / .))* ']' sp
nonterminal <- [a-zA-Z]+ sp
sp          <- [ \t\n]*
tag         <- '{' (!'}' .)+ '}' sp
Direct parents
Insert list: PACKRAT_FEATURES
Class invariant
Overview
Creation features
{ANY}
Features
{}
{ANY}
test only
{EIFFELTEST_TOOLS}
low-level parsers
{}
{ANY}
reducer proxy (because Liberty Eiffel crashes if the agents are built in the once method)
{}
{}
{}
low-level image memory
{}
buffer moves
{}
Tune exports to your liking if need be
{}
{}
  • log: LOGGER
    There is one logger per concrete type; for performance reasons it is cached in each instance.
  • log_memory__0_: LOGGER
    The cached logger.
init
effective procedure
{}
with_reducer (a_reducer: PACKRAT_REDUCER)
effective procedure
{}
require
  • a_reducer /= Void
ensure
make
effective procedure
{}
default_reducer: PACKRAT_DEFAULT_REDUCER
once function
{}
once function
{}
writable attribute
{}
effective function
{ANY}
reset
effective procedure
{ANY}
set_table (a_table: PARSE_TABLE[PACKRAT_PARSE_CONTEXT], a_root: STRING)
effective procedure
ensure
root: STRING
writable attribute
reset_table
effective procedure
parse_lookahead (buffer: MINI_PARSER_BUFFER): PACKRAT_IMAGE
effective function
{}
parse_quantifier (buffer: MINI_PARSER_BUFFER): PACKRAT_IMAGE
effective function
{}
parse_character (buffer: MINI_PARSER_BUFFER): PACKRAT_IMAGE
effective function
{}
parse_space (buffer: MINI_PARSER_BUFFER): PACKRAT_IMAGE
effective function
{}
effective function
{ANY}
require
error: PARSE_ERROR
writable attribute
{ANY}
reducer: PACKRAT_REDUCER
writable attribute
{}
reduce_nonterminal_def
effective procedure
{}
reduce_grammar
effective procedure
{}
reduce_pattern_first_alternative
effective procedure
{}
reduce_pattern_alternative
effective procedure
{}
reduce_pattern
effective procedure
{}
reduce_pattern_map (alt: PACKRAT_ALTERNATIVE)
effective procedure
{}
reduce_alternative_lookahead
effective procedure
{}
reduce_alternative_suffix_tag
effective procedure
{}
reduce_alternative_tag
effective procedure
{}
reduce_alternative
effective procedure
{}
reduce_quantifier
effective procedure
{}
reduce_suffix
effective procedure
{}
reduce_primary_as_nested_pattern
effective procedure
{}
reduce_primary_as_any
effective procedure
{}
reduce_primary_as_literal
effective procedure
{}
reduce_primay_as_charclass
effective procedure
{}
reduce_primary_as_nonterminal
effective procedure
{}
reduce_literal_start
effective procedure
{}
reduce_literal_string
effective procedure
{}
reduce_literal
effective procedure
{}
reduce_tag_start
effective procedure
{}
reduce_tag_string
effective procedure
{}
reduce_tag
effective procedure
{}
reduce_charclass_start
effective procedure
{}
reduce_charclass_range
effective procedure
{}
reduce_charclass_char
effective procedure
{}
reduce_charclass_class
effective procedure
{}
reduce_charclass
effective procedure
{}
reduce_nonterminal_name
effective procedure
{}
reduce_nonterminal
effective procedure
{}
reduce_space
effective procedure
{}
reduce_image_left_arrow (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_slash (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_not_and (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_star_plus_why (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_open_paren (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_close_paren (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_anychar (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_letter (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_string (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_quote (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_hyphen (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_dot (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_open_bracket (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_close_bracket (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_open_curly (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_close_curly (image: PARSER_IMAGE)
effective procedure
{}
reduce_image_space (image: PARSER_IMAGE)
effective procedure
{}
reset_features
effective procedure
{}
parse_any (buffer: MINI_PARSER_BUFFER): PACKRAT_IMAGE
effective function
{}
parse_regex (buffer: MINI_PARSER_BUFFER, regex: REGULAR_EXPRESSION): PACKRAT_IMAGE
effective function
{}
the regex must parse exactly one character
parse_string (buffer: MINI_PARSER_BUFFER, string: STRING): PACKRAT_IMAGE
effective function
{}
once function
{}
next_character (buffer: MINI_PARSER_BUFFER)
effective procedure
{}
restore (buffer: MINI_PARSER_BUFFER, a_position: PACKRAT_POSITION)
effective procedure
{}
position: PACKRAT_POSITION
writable attribute
{}
new_image (char: CHARACTER): PACKRAT_IMAGE
effective function
{}
one: INTEGER_8
is 0
constant attribute
{}
zero_or_one: INTEGER_8
is 1
constant attribute
{}
zero_or_more: INTEGER_8
is 2
constant attribute
{}
one_or_more: INTEGER_8
is 3
constant attribute
{}
seq (a_primaries: TRAVERSABLE[PACKRAT_PRIMARY], a_how_many: INTEGER_8, a_tag: ABSTRACT_STRING, a_action: PROCEDURE[TUPLE]): PACKRAT_ALTERNATIVE
effective function
{}
require
ref (a_atom_name: ABSTRACT_STRING): PACKRAT_PRIMARY
effective function
{}
require
  • a_atom_name /= Void
log: LOGGER
effective function
{}
There is one logger per concrete type; for performance reasons it is cached in each instance.
ensure
  • Result /= Void
log_memory__0_: LOGGER
writable attribute
{}
The cached logger.
The ugly name is intentional. Don't use directly.