class Name(Expression): token_node = True designated_unit = ExternalProperty(type=AnalysisUnit, uses_entity_info=False, uses_envs=True) result = Property(Self.designated_unit.root.cast(Expression).result)
class Literal(Expression): token_node = True # This one is private, but it is called by "evaluate" so it's not usused result = ExternalProperty(uses_entity_info=False, uses_envs=False) # See Expression.name names = Property(No(T.Name.array)) evaluate = Property(Self.result, public=True)
class Name(Expression): token_node = True # This one is private and called transitively from a public property designated_unit = ExternalProperty(type=AnalysisUnit, uses_entity_info=False, uses_envs=False) result = Property(Self.designated_unit.root.cast(Expression).result) # See Expression.name names = Property(Self.singleton)
class FooNode(ASTNode): pass @abstract class AbstractExample(FooNode): p = abstract_prop() class Example(AbstractExample): p = prop() if prop else None def lang_def(): foo_grammar = Grammar('main_rule') foo_grammar.add_rules( main_rule=Row('example') ^ Example, ) return foo_grammar emit_and_print_errors(lang_def) print('') run("Missing type", lambda: ExternalProperty()) run("Invalid abstract", lambda: ExternalProperty(abstract=True, type=T.FooNode), lambda: Property(Self)) run("Invalid memoized", lambda: ExternalProperty(memoized=True)) print 'Done'
class AbstractExample(FooNode): p = abstract_prop() public_p = Property(Self.p, public=True) class Example(AbstractExample): if prop: p = prop() grammar = Grammar('main_rule') grammar.add_rules(main_rule=Example('example'), ) emit_and_print_errors(grammar) print('') run('Missing type', lambda: ExternalProperty(uses_entity_info=False, uses_envs=False)) run( 'Invalid abstract', lambda: ExternalProperty( abstract=True, type=T.FooNode, uses_entity_info=False, uses_envs=False ), lambda: Property(Self)) run( 'Invalid memoized', lambda: ExternalProperty( memoized=True, type=BoolType, uses_entity_info=False, uses_envs=False)) run('Missing uses_entity_info=...', lambda: ExternalProperty(memoized=True, type=BoolType, uses_envs=False)) run( 'Missing uses_envs=...', lambda: ExternalProperty( memoized=True, type=BoolType, uses_entity_info=False))
class Literal(Expression): token_node = True result = ExternalProperty(uses_entity_info=False, uses_envs=False)
class Literal(Expression): tok = Field() result = ExternalProperty()
class Literal(Expr): token_node = True evaluate = ExternalProperty(uses_entity_info=False, uses_envs=False)
class Literal(Expression): tok = Field() result = ExternalProperty(uses_entity_info=False, uses_envs=False)
@abstract class AbstractExample(FooNode): p = abstract_prop() public_p = Property(Self.p, public=True) class Example(AbstractExample): if prop: p = prop() emit_and_print_errors(lkt_file='foo.lkt') print('') run('Missing type', lambda: ExternalProperty(uses_entity_info=False, uses_envs=False)) run('Invalid abstract', lambda: ExternalProperty(abstract=True, type=T.FooNode, uses_entity_info=False, uses_envs=False), lambda: Property(Self)) run('Invalid memoized', lambda: ExternalProperty(memoized=True, type=Bool, uses_entity_info=False, uses_envs=False)) run('Missing uses_entity_info=...', lambda: ExternalProperty(memoized=True, type=Bool, uses_envs=False)) run('Missing uses_envs=...', lambda: ExternalProperty(memoized=True, type=Bool, uses_entity_info=False))
class Name(Expression): tok = Field() designated_unit = ExternalProperty(type=AnalysisUnitType) result = Property(Self.designated_unit.root.cast(Expression).result)