Pelzini

This is the code documentation for the Pelzini project

source of /processor/c_parser.php

Contains the CParser class
  1. <?php
  2. /*
  3. Copyright 2008 Josh Heidenreich
  4.  
  5. This file is part of Pelzini.
  6.  
  7. Pelzini is free software: you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation, either version 3 of the License, or
  10. (at your option) any later version.
  11.  
  12. Pelzini is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with Pelzini. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20.  
  21.  
  22. /**
  23.  * Contains the {@link CParser} class
  24.  *
  25.  * @package Parsers
  26.  * @author Josh
  27.  * @since 0.2
  28.  **/
  29.  
  30. /**
  31.  * Does the complete parsing of a C file.
  32.  **/
  33. class CParser
  34. {
  35. private $lexer;
  36. private $analyser;
  37.  
  38. public function __construct()
  39. {
  40. $this->lexer = new CLexer();
  41. $this->analyser = new CAnalyser();
  42. }
  43.  
  44.  
  45. /**
  46.   * Parses a file
  47.   *
  48.   * @param string $filename The file to parse
  49.   * @return A ParserFile object, or null if there was an error
  50.   **/
  51. public function parseFile($base_dir, $filename)
  52. {
  53. $this->lexer->resetState();
  54.  
  55. $source = @file_get_contents($base_dir . $filename);
  56. if ($source == null) return null;
  57.  
  58. $tokens = $this->lexer->process($source);
  59. if ($tokens === null) return null;
  60.  
  61. //echo "<style>i {color: #777;}</style>";
  62. //echo '<pre>Tokens for file ', $filename, "\n";
  63. //foreach ($tokens as $i => $t) echo "<b>{$i}</b> {$t->getTypeName()} <i>{$t->getValue()}</i>\n";
  64. //echo '</pre>';
  65.  
  66. $file = new ParserFile();
  67. $file->name = $filename;
  68. $file->source = $source;
  69.  
  70. $result = $this->analyser->process($tokens, $file);
  71. if ($result === false) return null;
  72.  
  73. return $file;
  74. }
  75.  
  76.  
  77. }
  78.  
  79.  
  80. ?>
  81.