1. A computer-implemented method comprising: storing a matching library comprising code for matching a plurality of predicates in a first procedural programming language against nodes of an abstract syntax tree (AST); obtaining an input AST corresponding to computer program code to analyze; obtaining, from a user, analysis code comprising a predicate expression query referencing the matching library and action code performing an action with respect to the computer program code, wherein the computer program code, the predicate expression query, and the action code are specified in the same first procedural programming language; identifying nodes of the input AST that match the predicate expression query by executing code of the matching library; executing the action code against the identified nodes of the input AST that match the predicate expression query; and outputting a result of the execution of the action code.