You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.9 KiB
61 lines
1.9 KiB
4 months ago
|
Some usage notes for the D Parser:
|
||
|
|
||
|
- it is a port of the Java parser, so interface is very similar.
|
||
|
|
||
|
- the lexer class needs to implement the interface 'Lexer' (similar to
|
||
|
java). It typically (depending on options) looks like this:
|
||
|
|
||
|
public interface Lexer
|
||
|
{
|
||
|
/**
|
||
|
* Method to retrieve the beginning position of the last scanned token.
|
||
|
* @return the position at which the last scanned token starts. */
|
||
|
@property YYPosition startPos ();
|
||
|
|
||
|
/**
|
||
|
* Method to retrieve the ending position of the last scanned token.
|
||
|
* @return the first position beyond the last scanned token. */
|
||
|
@property YYPosition endPos ();
|
||
|
|
||
|
/**
|
||
|
* Method to retrieve the semantic value of the last scanned token.
|
||
|
* @return the semantic value of the last scanned token. */
|
||
|
@property YYSemanticType semanticVal ();
|
||
|
|
||
|
/**
|
||
|
* Entry point for the scanner. Returns the token identifier corresponding
|
||
|
* to the next token and prepares to return the semantic value
|
||
|
* and beginning/ending positions of the token.
|
||
|
* @return the token identifier corresponding to the next token. */
|
||
|
YYTokenType yylex ();
|
||
|
|
||
|
/**
|
||
|
* Entry point for error reporting. Emits an error
|
||
|
* referring to the given location in a user-defined way.
|
||
|
*
|
||
|
* @param loc The location of the element to which the
|
||
|
* error message is related
|
||
|
* @param s The string for the error message. */
|
||
|
void yyerror (YYLocation loc, string s);
|
||
|
}
|
||
|
|
||
|
- semantic types are handled by D usions (same as for C/C++ parsers)
|
||
|
|
||
|
- the following (non-standard) %defines are supported:
|
||
|
|
||
|
%define package "<package_name>"
|
||
|
%define api.parser.class "my_class_name>"
|
||
|
%define position_type "my_position_type"
|
||
|
%define location_type "my_location_type"
|
||
|
|
||
|
- the following declarations basically work like in C/C++:
|
||
|
|
||
|
%locations
|
||
|
%error-verbose
|
||
|
%parse-param
|
||
|
%initial-action
|
||
|
%code
|
||
|
%union
|
||
|
|
||
|
- %destructor is not yet supported
|