# # This example demonstrates relative imports with rule rewrite # see multiples.lark # # # if b is a number written in binary, and m is either 2 or 3, # the grammar aims to recognise m:b iif b is a multiple of m # # for example, 3:1001 is recognised # because 9 (0b1001) is a multiple of 3 # from lark import Lark, UnexpectedInput parser = Lark.open('multiples.lark', parser='lalr') def is_in_grammar(data): try: parser.parse(data) except UnexpectedInput: return False return True for n_dec in range(100): n_bin = bin(n_dec)[2:] assert is_in_grammar('2:{}'.format(n_bin)) == (n_dec % 2 == 0) assert is_in_grammar('3:{}'.format(n_bin)) == (n_dec % 3 == 0)