Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Examples

Parser Class Reference

YCP parser A YCP parser read a characters stream and outputs a sequence of YCP values. Three properties of the YCP grammar are important:. More...

#include <Parser.h>

List of all members.

Public Member Functions

void init ()
 Parser ()
 Parser (FILE *file, const char *filename=0)
 Parser (const char *buf)
 Parser (int fd, const char *filename=0)
 ~Parser ()
YCodePtr parse (SymbolTable *gTable=0, SymbolTable *lTable=0)
Scannerscanner ()
void setScanner (Scanner *)
bool atEOF ()
void setInput (FILE *file, const char *filename=0)
void setInput (const char *buf)
void setInput (int fd, const char *filename=0)
void setBuffered ()
void setDepends ()
bool depends () const
const char * filename () const
void setFilename (const string f)
void restoreFilename () const

Public Attributes

YCodePtr m_result
int m_lineno
int m_loop_count
int m_parser_errors
blockstack_tm_block_stack
scannerstack_tm_scanner_stack
YBlockPtr m_current_block
int m_blockstack_depth

Private Attributes

Scannerm_scanner
bool m_buffered
bool m_depends
string m_restore_name
bool m_at_eof


Detailed Description

YCP parser A YCP parser read a characters stream and outputs a sequence of YCP values. Three properties of the YCP grammar are important:.

1. The syntactical representation of a YCP value uniquely defines its type.

2. The interpretation of the syntactical representation of a YCP value is not dependend on the leading context.

3. The interpretation of the syntactical representation of a YCP value is not dependend on the trailing context other than one trailing white space.

Property 1 allows you to call the parser without the specification, which type of value you expect. This allows a YCP protocol block to be of any YCP value.

Property 2 allows the parser class to be free of variables that must be kept between to parses.

Property 3 is especially important, because it allows the parser to determine the end of a value without having to look ahead more that one character.


Constructor & Destructor Documentation

Parser::Parser  ) 
 

Creates a new YCP parser. Afterwards you must set an input source with a call to setInput

Parser::Parser FILE *  file,
const char *  filename = 0
 

Creates a new YCP parser

Parameters:
filename If you have the name of the file you parse available, pass it here in order to get nice error location messages in case of a parse error.

Parser::Parser const char *  buf  ) 
 

Creates a new YCP parser

Parser::Parser int  fd,
const char *  filename = 0
 

Creates a new YCP parser

Parameters:
filename If you have the name of the file you parse available, pass it here in order to get nice error location messages in case of a parse error.

Parser::~Parser  ) 
 

Cleans up.


Member Function Documentation

bool Parser::atEOF  ) 
 

report EOF state. If parse() returns 0 the caller should check atEOF() in order to distinguish between a syntax error and end-of-file.

bool Parser::depends  )  const
 

Only dependencies ?

const char * Parser::filename  )  const
 

Accesses filename from ExecutionEnvironment

void Parser::init  ) 
 

Initialize the internal state of the parser.

YCodePtr Parser::parse SymbolTable gTable = 0,
SymbolTable lTable = 0
 

Reads in as many bytes from the input stream as are neccessary to parse a YCP file.

Returns:
the parsed value. Returns 0, if no value could be parsed (due to a parse error or the end of the input stream). The value must be deleted after use.
If gTable and lTable are set, they're used instead of local ones. This is used for include files using the symbol tables of the including block. see: Scanner::initTables()

void Parser::restoreFilename  )  const
 

Restore filename to ExecutionEnvironment

Scanner * Parser::scanner  ) 
 

Accesses the scanner

void Parser::setBuffered  ) 
 

Makes the scanner use buffering, i.e. read more than one character at once.

void Parser::setDepends  ) 
 

Just output dependencies.

void Parser::setFilename const string  f  ) 
 

Sets filename in ExecutionEnvironment

void Parser::setInput int  fd,
const char *  filename = 0
 

Parse a value from a file descriptor

Parameters:
filename If you have the name of the file you parse available, pass it here in order to get nice error location messages in case of a parse error.

void Parser::setInput const char *  buf  ) 
 

use buf for further parsing

void Parser::setInput FILE *  file,
const char *  filename = 0
 

use file for further parsing.

Parameters:
filename If you have the name of the file you parse available, pass it here in order to get nice error location messages in case of a parse error.

void Parser::setScanner Scanner  ) 
 

Sets the scanner. For scannerstack use, this should be encapsulated better.


Member Data Documentation

bool Parser::m_at_eof [private]
 

If true, the scanner reached EOF.

blockstack_t* Parser::m_block_stack
 

Stack of parsed blocks

int Parser::m_blockstack_depth
 

integer number for the depth of the current block

bool Parser::m_buffered [private]
 

Is true, if the input can be buffered, i.e. more than one character may be read at once in order to gain performance.

YBlockPtr Parser::m_current_block
 

pointer to the currently parsed block

bool Parser::m_depends [private]
 

Is true, if just imported modules and included files are to be checked (make depends)

int Parser::m_lineno
 

Copied from struct parserret

int Parser::m_loop_count
 

Loop nesting level. Detects break outside a loop. Was a static variable in parser.yy

int Parser::m_parser_errors
 

Errors during one parse. Was a static variable in parser.yy

string Parser::m_restore_name [private]
 

Filename of ExecutionEnvironment, restore at destructor

YCodePtr Parser::m_result
 

Copied from struct parserret Does not need to be deleted by us

Scanner* Parser::m_scanner [private]
 

This is where the parser gets its input from.

scannerstack_t* Parser::m_scanner_stack
 

Scanners used for include parsing


The documentation for this class was generated from the following files:
Generated on Fri Nov 9 18:15:24 2007 for yast2-core by doxygen 1.3.6