diff options
author | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2013-08-15 15:47:43 -0700 |
---|---|---|
committer | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2013-08-15 15:47:43 -0700 |
commit | 1b97eefb7895435203631c79ce9c32192927e7b7 (patch) | |
tree | 4ba9bd5380f4a9f5c0c4b16b9ef3e7c09be821eb | |
parent | 0f12919835eabdfef8a7b3b981de057bb8bc5957 (diff) | |
download | pyscss-1b97eefb7895435203631c79ce9c32192927e7b7.tar.gz |
Remove the need for _rewind.
-rw-r--r-- | scss/expression.py | 27 | ||||
-rw-r--r-- | scss/src/grammar/grammar.g | 11 | ||||
-rw-r--r-- | scss/src/grammar/grammar.py | 23 |
3 files changed, 26 insertions, 35 deletions
diff --git a/scss/expression.py b/scss/expression.py index 802d35a..e970ccf 100644 --- a/scss/expression.py +++ b/scss/expression.py @@ -430,10 +430,6 @@ class Parser(object): self._pos += 1 return tok[3] - def _rewind(self, n=1): - self._pos -= min(n, self._pos) - self._scanner.rewind(self._pos) - ################################################################################ ## Grammar compiled using Yapps: @@ -671,15 +667,15 @@ class SassExpression(Parser): return ArgspecLiteral(v) def argspec_item(self): - var = None - if self._peek(self.argspec_item_rsts) == 'VAR': - VAR = self._scan('VAR') - if self._peek(self.argspec_item_rsts_) == '":"': - self._scan('":"') - var = VAR - else: self._rewind() - expr_slst = self.expr_slst() - return (var, expr_slst) + _token_ = self._peek(self.argspec_item_rsts) + if _token_ == 'KWVAR': + KWVAR = self._scan('KWVAR') + self._scan('":"') + expr_slst = self.expr_slst() + return (KWVAR, expr_slst) + else: # in self.not_expr_rsts + expr_slst = self.expr_slst() + return (None, expr_slst) def expr_lst(self): expr_slst = self.expr_slst() @@ -711,12 +707,11 @@ class SassExpression(Parser): u_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID']) expr_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'ID', 'BANG_IMPORTANT', 'OR', '","']) not_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID']) - argspec_item_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID']) - atom_rsts_ = set(['LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'RPAR', 'ID']) + argspec_item_rsts = set(['KWVAR', 'LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID']) + atom_rsts_ = set(['KWVAR', 'LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'RPAR', 'ID']) comparison_chks = set(['GT', 'GE', 'NE', 'LT', 'LE', 'EQ']) a_expr_chks = set(['ADD', 'SUB']) a_expr_rsts = set(['LPAR', 'SUB', 'QSTR', 'RPAR', 'BANG_IMPORTANT', 'LE', 'COLOR', 'NE', 'LT', 'NUM', 'GT', 'END', 'SIGN', 'GE', 'FNCT', 'STR', 'VAR', 'EQ', 'ID', 'AND', 'ADD', 'NOT', 'OR', '","']) - argspec_item_rsts_ = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', '":"', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', 'FNCT']) expr_slst_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', '","']) diff --git a/scss/src/grammar/grammar.g b/scss/src/grammar/grammar.g index 4eac9ef..5a27baa 100644 --- a/scss/src/grammar/grammar.g +++ b/scss/src/grammar/grammar.g @@ -114,13 +114,10 @@ parser SassExpression: argspec_item {{ v.append(argspec_item) }} )* {{ return ArgspecLiteral(v) }} - rule argspec_item: {{ var = None }} - [ - VAR - [ ":" {{ var = VAR }} - ] {{ else: self._rewind() }} - ] - expr_slst {{ return (var, expr_slst) }} + rule argspec_item: ( + KWVAR ":" expr_slst {{ return (KWVAR, expr_slst) }} + | expr_slst {{ return (None, expr_slst) }} + ) rule expr_lst: expr_slst {{ v = [expr_slst] }} ( diff --git a/scss/src/grammar/grammar.py b/scss/src/grammar/grammar.py index d78b65f..ebfa9e0 100644 --- a/scss/src/grammar/grammar.py +++ b/scss/src/grammar/grammar.py @@ -242,15 +242,15 @@ class SassExpression(Parser): return ArgspecLiteral(v) def argspec_item(self): - var = None - if self._peek(self.argspec_item_rsts) == 'VAR': - VAR = self._scan('VAR') - if self._peek(self.argspec_item_rsts_) == '":"': - self._scan('":"') - var = VAR - else: self._rewind() - expr_slst = self.expr_slst() - return (var, expr_slst) + _token_ = self._peek(self.argspec_item_rsts) + if _token_ == 'KWVAR': + KWVAR = self._scan('KWVAR') + self._scan('":"') + expr_slst = self.expr_slst() + return (KWVAR, expr_slst) + else: # in self.not_expr_rsts + expr_slst = self.expr_slst() + return (None, expr_slst) def expr_lst(self): expr_slst = self.expr_slst() @@ -282,12 +282,11 @@ class SassExpression(Parser): u_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID']) expr_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'ID', 'BANG_IMPORTANT', 'OR', '","']) not_expr_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID']) - argspec_item_rsts = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'BANG_IMPORTANT', 'ID']) - atom_rsts_ = set(['LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'NOT', 'ADD', 'NUM', 'FNCT', 'STR', 'VAR', 'RPAR', 'ID']) + argspec_item_rsts = set(['KWVAR', 'LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID']) + atom_rsts_ = set(['KWVAR', 'LPAR', 'BANG_IMPORTANT', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'FNCT', 'STR', 'NOT', 'RPAR', 'ID']) comparison_chks = set(['GT', 'GE', 'NE', 'LT', 'LE', 'EQ']) a_expr_chks = set(['ADD', 'SUB']) a_expr_rsts = set(['LPAR', 'SUB', 'QSTR', 'RPAR', 'BANG_IMPORTANT', 'LE', 'COLOR', 'NE', 'LT', 'NUM', 'GT', 'END', 'SIGN', 'GE', 'FNCT', 'STR', 'VAR', 'EQ', 'ID', 'AND', 'ADD', 'NOT', 'OR', '","']) - argspec_item_rsts_ = set(['LPAR', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', '":"', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', 'FNCT']) expr_slst_rsts = set(['LPAR', 'END', 'COLOR', 'QSTR', 'SIGN', 'VAR', 'ADD', 'NUM', 'RPAR', 'FNCT', 'STR', 'NOT', 'BANG_IMPORTANT', 'ID', '","']) |