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>

Latest News

Jens Pagel wins Bill McCune PhD Award

We congratulate Jens Pagel for receiving the 2021 Bill McCune PhD Award in Automated Reasoning! Jens graduated in 2020; his thesis on Decision procedures for separation logic: beyond symbolic heaps (supervised by Florian Zuleger) presents his substantial contributions to the theory of formal verification and automated reasoning, and to verifying heap-manipulating programs in particular.

Continue reading

Full news archive