FShell Query Language (FQL)
For a reference documentation of FQL please see our ASE’10 publication
Andreas Holzer, Christian Schallhart, Michael Tautschnig, and Helmut Veith. How did you specify your test suite ? In Proceedings of the 25th IEEE/ACM International Conference on Automated Software Engineering (ASE 2010), September 2010.
FShell accepts the following language, which includes control and macro commands in addition to core FQL statements.
Control commands
<Statement> ::= `QUIT' | `HELP'
| `ADD' `SOURCECODE' <Defines> <File name>
| `SHOW' `FILENAMES'
| `SHOW' `SOURCECODE' <File name>
| `SHOW' `SOURCECODE' `ALL'
| `SET' <Options>
<Options> ::= `ENTRY' <Identifier>
| `LIMIT' `COUNT' <Number>
| `NO_ZERO_INIT'
| `ABSTRACT' <Identifier>
<File name> ::= <Singly Quoted String>
<Defines> ::=
| `-D' <Identifier> <Defines>
| `-D' <Identifier> `=' <Singly Quoted String> <Defines>
Comments start with `//' and end at the end of the line
Macro definitions
<Macro> ::= `#define' <Macro Decl> <Some Def or Empty>
<Macro Decl> ::= <Identifier>
| <Identifier> `(' <Macro Args> `)'
<Macro Args> ::= <Identifier>
| <Macro Args> `,' <Identifier>
FQL
<Query> ::= <Scope> <Cover> <Passing>
<Scope> ::=
| `IN' <Filter>
<Cover> ::= `COVER' <Start_Anchor> <Coverage_Pattern> <End_Anchor>
<Passing> ::=
| `PASSING' <Start_Anchor> <Path_Pattern> <End_Anchor>
<Start_Anchor> ::=
| `^'
<End_Anchor> ::=
| `$'
<Coverage_Pattern> ::= <Coverage_Pattern_Term>
| <Coverage_Pattern> `+' <Coverage_Pattern_Term>
<Coverage_Pattern_Term> ::= <Coverage_Pattern_Factor>
| <Coverage_Pattern_Term> `.' <Coverage_Pattern_Factor>
| <Coverage_Pattern_Term> `->' <Coverage_Pattern_Factor>
<Coverage_Pattern_Factor> ::= <ECP_Atom>
| `(' <Coverage_Pattern> `)'
| `"' <Path_Pattern> `"'
<Path_Pattern> ::= <Path_Pattern_Term>
| <Path_Pattern> `+' <Path_Pattern_Term>
<Path_Pattern_Term> ::= <Path_Pattern_Factor>
| <Path_Pattern_Term> `.' <Path_Pattern_Factor>
| <Path_Pattern_Term> `->' <Path_Pattern_Factor>
<Path_Pattern_Factor> ::= <ECP_Atom>
| `(' <Path_Pattern> `)'
| <Path_Pattern_Factor> `*'
| <Path_Pattern_Factor> `>=' <TOK_NAT_NUMBER>
| <Path_Pattern_Factor> `==' <TOK_NAT_NUMBER>
| <Path_Pattern_Factor> `<=' <TOK_NAT_NUMBER>
<ECP_Atom> ::= <Predicate>
| `NODES' `(' <Filter> `)'
| `EDGES' `(' <Filter> `)'
| <Filter>
| `PATHS' `(' <Filter> `,' <TOK_NAT_NUMBER> `)'
<Predicate> ::= `{[^{}]+}'
<Predicates> ::= <Predicate>
| <Predicates> `,' <Predicate
<Filter> ::= <Filter_Function>
| `(' <Filter> `)'
| `NOT' `(' <Filter> `)'
| <Filter> `|' <Filter>
| <Filter> `&' <Filter>
| `SETMINUS' `(' <Filter> `,' <Filter> `)'
| `COMPOSE' `(' <Filter> `,' <Filter> `)'
<Filter_Function> ::= `ID'
| `@FILE' `(' <TOK_QUOTED_STRING> `)'
| `@LINE' `(' <TOK_NAT_NUMBER> `)'
| `@[0-9]+'
| `@COLUMN' `(' <TOK_NAT_NUMBER> `)'
| `@FUNC' `(' <TOK_C_IDENT> `)'
| `@LABEL' `(' <TOK_C_IDENT> `)'
| `@CALL' `(' <TOK_C_IDENT> `)'
| `@CALLS'
| `@ENTRY' `(' <TOK_C_IDENT> `)'
| `@EXIT' `(' <TOK_C_IDENT> `)'
| `@BASICBLOCKENTRY'
| `@CONDITIONEDGE'
| `@DEF' `(' <TOK_C_IDENT> `)'
| `@USE' `(' <TOK_C_IDENT> `)'
| `@STMTTYPE' `(' <Stmttypes> `)'
<Stmttype> ::= `IF'
| `FOR'
| `WHILE'
| `SWITCH'
| `?:'
| `ASSERT'
<Stmttypes> ::= <Stmttype>
| <Stmttypes> `,' <Stmttype>