def compositeExpression(rule): rule | expression | (OP, '(', expressionList, ')') rule.astAttrs = { 'operator': OP, 'expressionList': expressionList, 'expression': expression } compositeExpression.astName = 'CompositeExpression' grammar = Grammar(start=compositeExpression, tokens=[SYMBOL, OP], ignore=[WHITE, NEWLINE], ast_tokens=[STRING]) filterParser = Translator(grammar) ast = grammar.ast_classes opTable = { 'and': And, 'or': Or, 'not': Not, 'eq': eq, 'ne': ne, 'lt': lt, 'gt': gt, 'ge': ge, 'le': le, 'wcard': wcard }
dble_header_body.ast_name = 'DbleHeaderBody' def body(rule): rule | ("{", units, "}") rule.astAttrs = {"units": units} body.ast_name = 'Body' grammar = Grammar(start=toplevel, tokens=[HEADER, WHITE, NEWLINE, ANY], ignore=[WHITE], ast_tokens=[STRING]) Dict = Translator(grammar) ast = grammar.ast_classes @Dict.translates(ast.Toplevel) def t_toplevel(): return Dict.translate(node.units) @Dict.translates(ast.Units) def t_units(node): dic = {} # h1, h2, b = None, None, None for unit in node.units: tu = Dict.translate(unit) typ = tu[0]
rule | ('{', [commas((STRING, ':', value))], '}') rule.astAttrs = {'keys': [STRING], 'values': [value]} dict_.astName = 'Dict' def list_(rule): rule | ('[', [commas(value)], ']') rule.astAttrs = {'values': [value]} list_.astName = 'List' grammar = Grammar(start=value, tokens=[SYMBOL], ignore=[WHITE, NEWLINE], ast_tokens=[STRING, TFN, NUMBER]) # translator stuff JSON = Translator(grammar) ast = grammar.ast_classes @JSON.translates(ast.Dict) def t_dict(node): return dict((JSON.translate(key), JSON.translate(value))\ for (key, value) in zip(node.keys, node.values)) @JSON.translates(ast.List) def t_list(node): return list(JSON.translate(value) for value in node.values) @JSON.translates(STRING) def t_string(node): return node.value[1:-1].decode('string_escape')
########NEW FILE######## __FILENAME__ = ctranslator #!/usr/bin/env python from codetalker.pgm import Translator, tokens from errors import TranslateError from grammar import grammar as ccssgrammar, declare_args import grammar import operator import values import consts ccssgrammar.load_rule(declare_args) CCSS = Translator(ccssgrammar, vbls=[consts.defaults.copy()], rule_stack=[], indent=4) ast = ccssgrammar.ast_classes def find_variable(name, scope): for vbls in scope.vbls: if name in vbls: return vbls[name] raise TranslateError('Undefined mixin %s' % name) def handle_body(tree, scope): text, after = '', '' for node in tree.body: