Merge branch 'maint/7.0'
[ninja.git] / src / op5 / ninja_sdk / parsegen / js / LalrVisitorJSGenerator.php
blob78be78f3dd467cd485ea9023520c6a4f32aa7855
1 <?php
3 class LalrVisitorJSGenerator extends js_class_generator {
4 private $grammar;
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);
14 $this->init_class();
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] == '_' )
29 return;
31 $args = array();
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();