Pol
Revision:cb584c9
|
#include <parser.h>
Public Member Functions | |
SmartParser () | |
virtual | ~SmartParser () |
bool | callingMethod (CompilerContext &ctx) |
int | getArgs (Expression &expr, CompilerContext &ctx) |
virtual int | getArrayElements (Expression &expr, CompilerContext &ctx)=0 |
virtual int | getDictionaryMembers (Expression &expr, CompilerContext &ctx)=0 |
virtual int | getFunctionPArgument (Expression &expr, CompilerContext &ctx, Token *tok)=0 |
virtual int | getMethodArguments (Expression &expr, CompilerContext &ctx, int &nargs)=0 |
virtual int | getNewArrayElements (Expression &expr, CompilerContext &ctx)=0 |
virtual int | getStructMembers (Expression &expr, CompilerContext &ctx)=0 |
virtual int | getToken (CompilerContext &ctx, Token &token, Expression *expr=NULL) POL_OVERRIDE |
virtual int | getUserArgs (Expression &expr, CompilerContext &ctx, bool inject_jsr=true)=0 |
int | IIP (Expression &expr, CompilerContext &ctx, unsigned expr_flags) |
int | IP (Expression &expr, char *s) |
int | IP (Expression &expr, CompilerContext &ctx) |
virtual int | isFunc (Token &tok, ModuleFunction **v)=0 |
virtual int | isLegal (Token &tok) |
virtual int | isOkay (const Token &token, BTokenType last_type) |
virtual int | isUserFunc (Token &tok, UserFunction **userfunc) |
SmartParser & | operator= (const SmartParser &) |
virtual int | parseToken (CompilerContext &ctx, Expression &expr, Token *) POL_OVERRIDE |
![]() | |
Parser () | |
virtual | ~Parser () |
int | IP (Expression &expr, char *s) |
Parser & | operator= (const Parser &) |
virtual int | peekToken (const CompilerContext &ctx, Token &token, Expression *expr=NULL) |
virtual int | recognize (Token &tok, const char *buf, const char **s) |
virtual int | recognize_binary (Token &tok, const char *buf, const char **s) |
virtual bool | recognize_reserved_word (Token &tok, const char *buf) |
virtual int | recognize_unary (Token &tok, const char *buf) |
void | reinit (Expression &ex) |
void | setQuiet (int x) |
virtual int | tryBinaryOperator (Token &tok, CompilerContext &ctx) |
virtual int | tryNumeric (Token &tok, CompilerContext &ctx) |
virtual int | tryOperator (Token &tok, const char *buf, const char **s, Operator *opList, int n_ops, char *opbuf) |
virtual int | tryUnaryOperator (Token &tok, CompilerContext &ctx) |
Protected Member Functions | |
virtual int | tryLiteral (Token &tok, CompilerContext &ctx) POL_OVERRIDE |
Protected Attributes | |
class ModuleFunction * | modfunc_ |
UserFunction * | userfunc_ |
Additional Inherited Members | |
![]() | |
static void | write_words (std::ostream &os) |
![]() | |
char | buffer [51] |
bool | contains_tabs |
ParseError | err |
char | ext_err [50] |
int | quiet |
|
inlinevirtual |
Definition at line 153 of file parser.h.
References POL_OVERRIDE.
bool Pol::Bscript::SmartParser::callingMethod | ( | CompilerContext & | ctx | ) |
Definition at line 2054 of file parser.cpp.
References Pol::Bscript::Parser::getToken(), Pol::Bscript::Token::id, Pol::Bscript::TOK_FUNC, Pol::Bscript::TOK_IDENT, Pol::Bscript::TOK_LPAREN, and Pol::Bscript::TOK_USERFUNC.
int Pol::Bscript::SmartParser::getArgs | ( | Expression & | expr, |
CompilerContext & | ctx | ||
) |
Definition at line 1952 of file parser.cpp.
References Pol::Bscript::Parser::err, Pol::Bscript::EXPR_FLAG_COMMA_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_RIGHTPAREN_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_SEMICOLON_TERM_ALLOWED, Pol::Bscript::Parser::getToken(), Pol::Bscript::Token::id, Pol::Bscript::ModuleFunction::nargs, Pol::Bscript::Parser::peekToken(), Pol::Bscript::PERR_MISSLPAREN, Pol::Bscript::PERR_NONE, Pol::Bscript::PERR_TOOFEWARGS, Pol::Bscript::PERR_TOOMANYARGS, Pol::Bscript::TOK_COMMA, Pol::Bscript::TOK_LPAREN, Pol::Bscript::TOK_RPAREN, and Pol::Bscript::TOK_SEMICOLON.
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
|
virtual |
Some identifiers are functions (user-defined or module-defined) these are recognized here. HOWEVER, in some cases these should be ignored - particularly, after the "." operator and its ilk. For example, if the LEN function is defined, "print a.len;" should still be valid (assuming A is a variable with a 'len' member). In these cases, the operator in question will be at the top of the TX stack. So, if we find this operator there, we won't check for functions. This is also the perfect opportunity to morph would-be identifiers into strings, or "member names" if that turns out the way to go. (Normally, we would emit TOK_IDENT(left) TOK_IDENT(right) TOK_MEMBER. The problem here is that TOK_IDENT(left) is seen as a variable (quite rightly), but so is TOK_IDENT(right), which is wrong. We used to transform this in addToken, but this is better I think.)
IP still does the same thing only it no longer looks for isVerb. have the new getToken put, say, the verb number in lval, so we now have an array element number.
Reimplemented from Pol::Bscript::Parser.
Definition at line 1923 of file parser.cpp.
References Pol::Bscript::Parser::getToken(), Pol::Bscript::Token::id, Pol::Bscript::TOK_ADDMEMBER, Pol::Bscript::TOK_CHKMEMBER, Pol::Bscript::TOK_DELMEMBER, Pol::Bscript::TOK_IDENT, Pol::Bscript::TOK_MEMBER, Pol::Bscript::TOK_STRING, and Pol::Bscript::Expression::TX.
Referenced by Pol::Bscript::Compiler::_getStatement(), Pol::Bscript::Compiler::eatToken(), Pol::Bscript::Compiler::forward_read_function(), Pol::Bscript::Compiler::getArrayElements(), Pol::Bscript::Compiler::getDictionaryMembers(), Pol::Bscript::Compiler::getExprInParens(), Pol::Bscript::Compiler::getFunctionPArgument(), Pol::Bscript::Compiler::getMethodArguments(), Pol::Bscript::Compiler::getNewArrayElements(), Pol::Bscript::Compiler::getStructMembers(), Pol::Bscript::Compiler::getUserArgs(), Pol::Bscript::Compiler::handleBlock(), Pol::Bscript::Compiler::handleBracketedFor_basic(), Pol::Bscript::Compiler::handleBracketedFor_c(), Pol::Bscript::Compiler::handleBracketedFunction2(), Pol::Bscript::Compiler::handleBracketedIf(), Pol::Bscript::Compiler::handleBreak(), Pol::Bscript::Compiler::handleConstDeclare(), Pol::Bscript::Compiler::handleContinue(), Pol::Bscript::Compiler::handleDeclare(), Pol::Bscript::Compiler::handleEnumDeclare(), Pol::Bscript::Compiler::handleExit(), Pol::Bscript::Compiler::handleFor_c(), Pol::Bscript::Compiler::handleForEach(), Pol::Bscript::Compiler::handleFunction(), Pol::Bscript::Compiler::handleIf(), Pol::Bscript::Compiler::handleInclude(), Pol::Bscript::Compiler::handleProgram(), Pol::Bscript::Compiler::handleProgram2(), Pol::Bscript::Compiler::handleReturn(), Pol::Bscript::Compiler::handleSwitch(), Pol::Bscript::Compiler::handleUse(), Pol::Bscript::Compiler::handleVarDeclare(), Pol::Bscript::Compiler::inner_read_function_declarations(), Pol::Bscript::Compiler::readblock(), Pol::Bscript::Compiler::readFunctionDeclaration(), and Pol::Bscript::Compiler::useModule().
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
int Pol::Bscript::SmartParser::IIP | ( | Expression & | expr, |
CompilerContext & | ctx, | ||
unsigned | flags | ||
) |
if comma terminator is allowed, (reading args, or declaring variables) leaves the terminator/comma. if comma term not allowed, eats the semicolon. if right paren allowed, leaves the right paren.
Definition at line 2077 of file parser.cpp.
References Pol::Bscript::Expression::CA, Pol::Bscript::compilercfg, Pol::Bscript::Token::copyStr(), Pol::Bscript::Token::dbg_filenum, Pol::Bscript::Token::dbg_linenum, Pol::Bscript::CompilerConfig::DisplayWarnings, Pol::Bscript::Token::dval, Pol::Bscript::Parser::err, Pol::Bscript::CompilerConfig::ErrorOnWarning, Pol::Bscript::EXPR_FLAG_AUTO_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_COMMA_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_DICTKEY_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_ENDENUM_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_RIGHTBRACE_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_RIGHTPAREN_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_SEMICOLON_TERM_ALLOWED, Pol::Bscript::EXPR_FLAG_SINGLE_ELEMENT, Pol::Bscript::EXPR_FLAG_TO_TERM_ALLOWED, Pol::Bscript::getKnownObjMethod(), Pol::Bscript::Parser::getToken(), Pol::Bscript::Token::id, Pol::Bscript::ObjMethod::id, INFO_PRINT, Pol::Bscript::INS_CALL_METHOD, Pol::Bscript::INS_CALL_METHOD_ID, Pol::Bscript::Token::lval, Pol::Clib::mklower(), Pol::Bscript::CompilerConfig::OptimizeObjectMembers, Pol::Bscript::CompilerConfig::ParanoiaWarnings, Pol::Bscript::Parser::parseToken(), Pol::Bscript::Parser::peekToken(), Pol::Bscript::PERR_ILLEGALCONS, Pol::Bscript::PERR_NONE, Pol::Bscript::PERR_NOTLEGALHERE, Pol::Bscript::PERR_UNEXRPAREN, Pol::Bscript::Parser::quiet, Pol::Bscript::Parser::recognize_unary(), Pol::Bscript::RSV_ENDENUM, Pol::Bscript::RSV_TO, Pol::Bscript::CompilerContext::s, Pol::Clib::stracpy(), Pol::Bscript::TOK_ARRAY, Pol::Bscript::TOK_COMMA, Pol::Bscript::TOK_DICTIONARY, Pol::Bscript::TOK_DICTKEY, Pol::Bscript::TOK_ERROR, Pol::Bscript::TOK_FUNCREF, Pol::Bscript::TOK_LBRACE, Pol::Bscript::TOK_LBRACKET, Pol::Bscript::TOK_LPAREN, Pol::Bscript::TOK_MEMBER, Pol::Bscript::TOK_RBRACE, Pol::Bscript::TOK_RBRACKET, Pol::Bscript::TOK_SEMICOLON, Pol::Bscript::TOK_STRUCT, Pol::Bscript::Token::tokval(), Pol::Bscript::Expression::TX, Pol::Bscript::TYP_FUNC, Pol::Bscript::TYP_LEFTBRACE, Pol::Bscript::TYP_LEFTBRACKET, Pol::Bscript::TYP_LEFTPAREN, Pol::Bscript::TYP_METHOD, Pol::Bscript::TYP_OPERAND, Pol::Bscript::TYP_OPERATOR, Pol::Bscript::TYP_RIGHTBRACKET, Pol::Bscript::TYP_RIGHTPAREN, Pol::Bscript::TYP_SEPARATOR, Pol::Bscript::TYP_TERMINATOR, Pol::Bscript::TYP_UNARY_OPERATOR, Pol::Bscript::TYP_USERFUNC, and Pol::Bscript::Token::type.
Referenced by Pol::Bscript::Compiler::getUserArgs(), and Pol::Bscript::Compiler::readexpr().
int Pol::Bscript::SmartParser::IP | ( | Expression & | expr, |
char * | s | ||
) |
int Pol::Bscript::SmartParser::IP | ( | Expression & | expr, |
CompilerContext & | ctx | ||
) |
Definition at line 2467 of file parser.cpp.
References Pol::Bscript::EXPR_FLAG_SEMICOLON_TERM_ALLOWED, and Pol::Bscript::Parser::reinit().
|
pure virtual |
Implemented in Pol::Bscript::Compiler.
|
inlinevirtual |
Reimplemented in Pol::Bscript::Compiler.
|
virtual |
Definition at line 1591 of file parser.cpp.
References Pol::Bscript::Token::id, INFO_PRINT, Pol::Bscript::Parser::quiet, Pol::Bscript::TOK_LBRACE, Pol::Bscript::TYP_FUNC, Pol::Bscript::TYP_FUNCREF, Pol::Bscript::TYP_METHOD, Pol::Bscript::TYP_OPERAND, Pol::Bscript::TYP_TESTMAX, Pol::Bscript::TYP_USERFUNC, and Pol::Bscript::Token::type.
|
inlinevirtual |
Reimplemented in Pol::Bscript::Compiler.
|
inline |
Definition at line 163 of file parser.h.
References POL_OVERRIDE.
|
virtual |
Implements Pol::Bscript::Parser.
Definition at line 1682 of file parser.cpp.
References Pol::Bscript::Expression::CA, Pol::Bscript::Token::dbg_filenum, Pol::Bscript::Token::dbg_linenum, Pol::Bscript::Parser::err, ERROR_PRINT, Pol::Bscript::find_precedence(), Pol::Bscript::Token::id, INFO_PRINT, Pol::Bscript::INS_MULTISUBSCRIPT, Pol::Bscript::Token::lval, Pol::Bscript::PERR_MISSRBRACKET, Pol::Bscript::PERR_MISSRPAREN, Pol::Bscript::PERR_UNEXPCOMMA, Pol::Bscript::PERR_UNEXRBRACKET, Pol::Bscript::PERR_UNEXRPAREN, Pol::Bscript::PERR_WAAH, Pol::Bscript::Parser::quiet, Pol::Bscript::TOK_ARRAY_SUBSCRIPT, Pol::Bscript::Expression::TX, Pol::Bscript::TYP_FUNC, Pol::Bscript::TYP_LEFTBRACKET, Pol::Bscript::TYP_LEFTPAREN, Pol::Bscript::TYP_OPERAND, Pol::Bscript::TYP_OPERATOR, Pol::Bscript::TYP_RIGHTBRACKET, Pol::Bscript::TYP_RIGHTPAREN, Pol::Bscript::TYP_SEPARATOR, Pol::Bscript::TYP_TERMINATOR, Pol::Bscript::TYP_UNARY_OPERATOR, Pol::Bscript::TYP_USERFUNC, and Pol::Bscript::Token::type.
|
protectedvirtual |
Like Parser::tryLiteral, with extra elements supported
Labels. A label is an ident operand, followed by a colon, followed by either whitespace or end-of-file. Note, this definition just happens to exclude ':=' and '::', which is important.
Reimplemented from Pol::Bscript::Parser.
Definition at line 1642 of file parser.cpp.
References Pol::Bscript::CTRL_LABEL, Pol::Bscript::Token::id, Pol::Bscript::CompilerContext::s, Pol::Bscript::TOK_IDENT, Pol::Bscript::Parser::tryLiteral(), Pol::Bscript::TYP_LABEL, and Pol::Bscript::Token::type.
|
protected |
|
protected |
Definition at line 159 of file parser.h.
Referenced by Pol::Bscript::Compiler::getUserArgs().