Parser Class Reference

YCP language parser. 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

Public Attributes

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

Private Attributes

Scannerm_scanner
bool m_buffered
bool m_depends
bool m_at_eof


Detailed Description

YCP language 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

References init(), m_at_eof, and m_lineno.

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.

References init(), m_at_eof, m_lineno, and setInput().

Parser::Parser ( const char *  buf  ) 

Creates a new YCP parser

References init(), m_at_eof, m_lineno, and setInput().

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.

References init(), m_at_eof, m_lineno, and setInput().

Parser::~Parser (  ) 

Cleans up.

References m_scanner.


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.

References m_at_eof.

Referenced by Y2StdioComponent::doActualWork(), main(), and parsefile().

bool Parser::depends (  )  const

Only dependencies ?

void Parser::init (  ) 

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()

References init(), Scanner::initTables(), m_at_eof, m_lineno, m_parser_errors, m_result, m_scanner, y2debug, y2internal, yydebug, and yyparse().

Referenced by Y2CCWFM::createInLevel(), main(), parse_client_and_options(), parse_server_and_options(), parsefile(), processfile(), SCRAgent::readconf(), Y2StdioComponent::receive(), Y2ProgramComponent::receiveFromExternal(), Y2SerialComponent::receiveFromSerial(), and run_agent_instance().

Scanner * Parser::scanner (  ) 

Accesses the scanner

References m_scanner.

Referenced by parsefile().

void Parser::setBuffered (  ) 

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

References m_at_eof, m_buffered, m_scanner, and Scanner::setBuffered().

Referenced by Y2CCWFM::createInLevel(), main(), parsefile(), processfile(), and run_agent_instance().

void Parser::setDepends (  ) 

Just output dependencies.

References m_depends.

Referenced by main().

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.

References m_at_eof, m_buffered, m_scanner, and Scanner::setBuffered().

void Parser::setInput ( const char *  buf  ) 

use buf for further parsing

References m_at_eof, m_buffered, m_scanner, and Scanner::setBuffered().

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.

References m_at_eof, m_buffered, m_scanner, and Scanner::setBuffered().

Referenced by Y2SerialComponent::initializeConnection(), Y2ProgramComponent::launchExternalProgram(), main(), parsefile(), Parser(), processfile(), and run_agent_instance().

void Parser::setScanner ( Scanner s  ) 

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

References m_scanner.


Member Data Documentation

bool Parser::m_at_eof [private]

If true, the scanner reached EOF.

Referenced by atEOF(), parse(), Parser(), setBuffered(), and setInput().

Stack of parsed blocks

Referenced by init().

integer number for the depth of the current block

Referenced by _blockstack_pop(), and init().

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.

Referenced by setBuffered(), and setInput().

pointer to the currently parsed block

Referenced by init().

bool Parser::m_depends [private]

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

Referenced by setDepends().

Copied from struct parserret

Referenced by parse(), and Parser().

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

Referenced by init().

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

Referenced by init(), and parse().

YCodePtr Parser::m_result

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

Referenced by init(), and parse().

This is where the parser gets its input from.

Referenced by parse(), scanner(), setBuffered(), setInput(), setScanner(), and ~Parser().

Scanners used for include parsing

Referenced by init().

Stack of parsed switches

Referenced by init().


The documentation for this class was generated from the following files:

Generated on a sunny day for yast2-core by doxygen 1.5.9