123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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. */
- TokenKind 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 unions (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
|