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

LogicLounge in memoriam Helmut Veith

Will robots take away your job? In memory of Helmut Veith, this year’s Conference on Computer Aided Verification (CAV), which takes place in Toronto, will feature a LogicLounge on the effect of automation and artificial intelligence on our jobs.

Continue reading

Questions answered by Leslie Lamport

Leslie Lamport is going to answer questions about a Mathematical View of Computer Systems in Informatikhörsaal on Tuesday at 6pm. Check the announcement at the VCLA website and do not forget to watch the lecture beforehand.

Continue reading

Full news archive