From d8d517706bdc47bb9e0b2e18bcdcd19cd16aeb40 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 9 Nov 2014 15:20:42 -0500 Subject: [PATCH] CLI - Implemented ::disqualifyFirstLastBinary to detect arguments that start or end with a binary operator, and are therefore not expressions. --- src/CLI.cpp | 19 ++++++++++++++++++- src/CLI.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/CLI.cpp b/src/CLI.cpp index 04523405f..893b40c51 100644 --- a/src/CLI.cpp +++ b/src/CLI.cpp @@ -666,7 +666,8 @@ void CLI::addArg (const std::string& arg) if (disqualifyInsufficientTerms (lexemes) || disqualifyNoOps (lexemes) || - disqualifyOnlyParenOps (lexemes)) + disqualifyOnlyParenOps (lexemes) || + disqualifyFirstLastBinary (lexemes)) { _original_args.push_back (raw); } @@ -2370,4 +2371,20 @@ bool CLI::disqualifyOnlyParenOps ( return opCount == opParenCount; } + +//////////////////////////////////////////////////////////////////////////////// +bool CLI::disqualifyFirstLastBinary ( + const std::vector >& lexemes) const +{ + std::string dummy; + if (canonicalize (dummy, "binary_operator", lexemes[0].first)) + return true; + + if (lexemes.size () > 1 && + canonicalize (dummy, "binary_operator", lexemes[lexemes.size () - 1].first)) + return true; + + return false; +} + //////////////////////////////////////////////////////////////////////////////// diff --git a/src/CLI.h b/src/CLI.h index 51a9aa45f..1265b6862 100644 --- a/src/CLI.h +++ b/src/CLI.h @@ -129,6 +129,7 @@ private: bool disqualifyInsufficientTerms (const std::vector >&) const; bool disqualifyNoOps (const std::vector >&) const; bool disqualifyOnlyParenOps (const std::vector >&) const; + bool disqualifyFirstLastBinary (const std::vector >&) const; public: std::multimap _entities;