3 class LalrVisitorJSGenerator
extends js_class_generator
{
6 public function __construct( $parser_name, $grammar ) {
7 $this->classname
= $parser_name . "Visitor";
8 $this->grammar
= $grammar->get_rules();
11 public function generate($skip_generated_note = false) {
12 parent
::generate($skip_generated_note);
15 foreach( $this->grammar
as $name => $item ) {
16 if( $name[0] != '_' ) {
17 $this->generate_visitor( $name, $item );
20 $this->generate_acceptor();
21 $this->finish_class();
24 private function generate_visitor( $name, $item ) {
25 $item_name = $item->get_name();
27 /* Transparent rules doesn't have a visitor method */
28 if( $item_name[0] == '_' )
32 foreach( $item->get_symbols() as $i => $symbol ) {
33 if( $item->symbol_enabled($i) ) {
34 $args[] = rtrim($symbol,'0123456789').$i;
38 $this->comment( strval( $item ) );
39 $this->init_function( 'visit_'.$name, $args );
40 $this->finish_function();
43 private function generate_acceptor() {
44 $this->init_function( 'accept', array('result') );
45 $this->finish_function();