Connect++ 0.1
A fast, readable connection prover for first-order logic.
Loading...
Searching...
No Matches
Classes | Typedefs | Functions | Variables
tptp_parser Namespace Reference

The tptp_parser namespace contains a lot of stuff that's essentially just global. More...

Classes

struct  cnf_annotated_grammar
 
struct  cnf_annotated_struct
 Parser's representation of a Clause. More...
 
struct  cnf_formula_grammar
 
struct  fof_annotated_grammar
 
struct  fof_atomic_formula_grammar
 
struct  fof_defined_infix_formula_grammar
 
struct  fof_formula_grammar
 
struct  fof_infix_unary_grammar
 
struct  fof_plain_term_struct
 Recursive data structure for Terms. More...
 
struct  fof_term_grammar
 
struct  include_grammar
 
struct  infix_struct
 Structure for fof_defined_infix_formula and fof_infix_unary. More...
 
struct  literal_grammar
 
struct  TPTP_file_grammar
 

Typedefs

using Iter = string::const_iterator
 Iterator type for parser rules and grammars.
 
using fof_arguments_struct = boost::variant< string, boost::recursive_wrapper< fof_plain_term_struct > >
 Variant - Term arguments can be Variables or other Terms.
 
using fof_atomic_formula_type = boost::variant< fof_plain_term_struct, infix_struct >
 An atomic formula can be infix as well.
 

Functions

void read_tptp_from_file_simple (const string &file_name, string &file_contents)
 
void recursive_tptp_include (const FileIncludeItem &include_item)
 

Variables

VariableIndexvar_index_p
 
FunctionIndexfun_index_p
 
TermIndext_index_p
 
PredicateIndexp_index_p
 
vector< FileIncludeItem > file_includes
 
set< string > to_include
 
bool include_this_item
 
bool is_first_status = true
 
string status
 
vector< string > all_defined
 
vector< string > all_system
 
bool equals_added
 
Predicateequals_p
 
bool conjecture_found = false
 
string current_clause_role
 
vector< string > clause_roles
 
string current_formula_role
 
vector< string > formula_roles
 
string current_formula_name
 
vector< string > formula_names
 
bool neg_lit
 
Literal current_lit
 
Clause current_clause
 
vector< Clauseall_clauses
 
FOF current_formula (FOFType::Empty)
 
vector< FOFall_formulas
 
qi::rule< Iter, char()> percentage_sign
 
qi::rule< Iter, char()> double_quote
 
qi::rule< Iter, char()> do_char
 
qi::rule< Iter, char()> single_quote
 
qi::rule< Iter, char()> sq_char
 
qi::rule< Iter, char()> sign
 
qi::rule< Iter, char()> dot
 
qi::rule< Iter, char()> exponent
 
qi::rule< Iter, char()> slash_char
 
qi::rule< Iter, char()> slosh_char
 
qi::rule< Iter, char()> zero_numeric
 
qi::rule< Iter, char()> non_zero_numeric
 
qi::rule< Iter, char()> numeric
 
qi::rule< Iter, char()> lower_alpha
 
qi::rule< Iter, char()> upper_alpha
 
qi::rule< Iter, char()> alpha_numeric
 
qi::rule< Iter, char()> dollar
 
qi::rule< Iter, char()> printable_char
 
qi::rule< Iter, char()> viewable_char
 
qi::rule< Iter, string()> slash
 
qi::rule< Iter, string()> slosh
 
qi::rule< Iter, string()> unsigned_exp_integer
 
qi::rule< Iter, string()> signed_exp_integer
 
qi::rule< Iter, string()> exp_integer
 
qi::rule< Iter, string()> dot_decimal
 
qi::rule< Iter, string()> positive_decimal
 
qi::rule< Iter, string()> decimal
 
qi::rule< Iter, string()> decimal_fraction
 
qi::rule< Iter, string()> decimal_exponent
 
qi::rule< Iter, string()> unsigned_integer
 
qi::rule< Iter, string()> signed_integer
 
qi::rule< Iter, string()> integer
 
qi::rule< Iter, string()> unsigned_rational
 
qi::rule< Iter, string()> signed_rational
 
qi::rule< Iter, string()> rational
 
qi::rule< Iter, string()> unsigned_real
 
qi::rule< Iter, string()> signed_real
 
qi::rule< Iter, string()> real
 
qi::rule< Iter, string()> vline
 
qi::rule< Iter, string()> star
 
qi::rule< Iter, string()> plus
 
qi::rule< Iter, string()> arrow
 
qi::rule< Iter, string()> less_sign
 
qi::rule< Iter, string()> hash
 
qi::rule< Iter, string()> lower_word
 
qi::rule< Iter, string()> formula_role
 
qi::rule< Iter, string()> upper_word
 
qi::rule< Iter, string()> variable
 
qi::rule< Iter, string()> dollar_dollar_word
 
qi::rule< Iter, string()> dollar_word
 
qi::rule< Iter, string()> distinct_object
 
qi::rule< Iter, string()> single_quoted
 
qi::rule< Iter, string()> file_name
 
qi::rule< Iternull
 
qi::rule< Iter, string()> comment_status
 
qi::rule< Iter, string(), ascii::space_type > status_comment
 
qi::rule< Iter, string()> standard_comment
 
qi::rule< Iter, string(), ascii::space_type > comment_line
 
qi::rule< Iter, string()> not_star_slash
 
qi::rule< Iter, string()> comment_block
 
qi::rule< Iter, string(), ascii::space_type > comment
 
qi::rule< Iter, string()> atomic_defined_word
 
qi::rule< Iter, string()> atomic_system_word
 
qi::rule< Iter, string()> system_functor
 
qi::rule< Iter, string()> system_constant
 
qi::rule< Iter, string()> number
 
qi::rule< Iter, string()> atomic_word
 
qi::rule< Iter, string()> predicate
 
qi::rule< Iter, string()> functor
 
qi::rule< Iter, string()> constant
 
qi::rule< Iter, string()> proposition
 
qi::rule< Iter, string()> name
 
qi::rule< Iter, string()> defined_predicate
 
qi::rule< Iter, string()> defined_proposition
 
qi::rule< Iter, string()> defined_functor
 
qi::rule< Iter, string()> defined_constant
 
qi::rule< Iter, string()> defined_term
 
qi::rule< Iter, string()> infix_equality
 
qi::rule< Iter, string()> infix_inequality
 
qi::rule< Iter, string()> defined_infix_pred
 
qi::rule< Iter, string()> fof_quantifier
 
qi::rule< Iter, string()> nonassoc_connective
 
qi::rule< Iter, string()> assoc_connective
 
qi::rule< Iter, string()> unary_connective
 

Detailed Description

The tptp_parser namespace contains a lot of stuff that's essentially just global.

Corresponds to v8.1.0.0 of the TPTP definition on 2-8-22.

WARNING!

You should probably REALLY not touch this unless you're very familiar indeed with the Spirit library in Boost, which is what's used to build the parser.

The good news is that you should never have to, because I'm a lovely man and have done all the hard work so you don't have to. Essentially the class TPTPParser wraps everything up and a call to TPTPParser::parse_tptp_from_file does a great deal (all!) of the work for you. This happens in StackProver::read_from_tptp_file, and at that point all the indices for Terms etc and the Matrix should be built.

Final note: yes this could be simpler, but the aim is to follow the actual TPTP specification as closely as possible. The naming should support this – names are chosen as much as possible to correspond to the TPTP documentation.

"What is this madness!?" I hear you cry.

Well, writing this is made very straightforward if you allow semantic actions to construct the results of the parse in what are essentially global data structures. Hiding them in a namespace takes some of the sting and uglyness away. Doing it differently is, I claim, just making life more difficult – this way, the TPTPParser class can just pull things out of the eventual globals – the user doesn't have to be any the wiser and they end up using the TermIndex, Matrix and so on quite happily, because those are the actual end result.

The boost library does actually have good support for doing all this in a nice OO way. Yes, I've tried that too. I came to the conclusion that the current approach yields much more readable code.

Variable Documentation

◆ alpha_numeric

qi::rule<Iter, char()> tptp_parser::alpha_numeric
Initial value:
=
lower_alpha
| upper_alpha
| numeric
| qi::char_('_')

◆ arrow

qi::rule<Iter, string()> tptp_parser::arrow
Initial value:
=
ascii::string(">")

◆ assoc_connective

qi::rule<Iter, string()> tptp_parser::assoc_connective
Initial value:
=
vline
| ascii::string("&")

◆ atomic_defined_word

qi::rule<Iter, string()> tptp_parser::atomic_defined_word
Initial value:
=
dollar_word

◆ atomic_system_word

qi::rule<Iter, string()> tptp_parser::atomic_system_word
Initial value:
=
dollar_dollar_word

◆ atomic_word

qi::rule<Iter, string()> tptp_parser::atomic_word
Initial value:
=
lower_word
| single_quoted

◆ comment

qi::rule<Iter, string(), ascii::space_type> tptp_parser::comment
Initial value:
=
comment_line | comment_block

◆ comment_block

qi::rule<Iter, string()> tptp_parser::comment_block
Initial value:
=
qi::char_('/')
>> qi::char_('*')
>> not_star_slash
>> qi::char_('*') >> *(qi::char_('*')) >> qi::char_('/')

◆ comment_line

qi::rule<Iter, string(), ascii::space_type> tptp_parser::comment_line
Initial value:
=
status_comment
| standard_comment

◆ comment_status

qi::rule<Iter, string()> tptp_parser::comment_status
Initial value:
=
ascii::string("Theorem")
| ascii::string("ContradictoryAxioms")
| ascii::string("CounterSatisfiable")
| ascii::string("Satisfiable")
| ascii::string("Unsatisfiable")
| ascii::string("Unknown")
| ascii::string("Open")

◆ constant

qi::rule<Iter, string()> tptp_parser::constant
Initial value:
=
functor

◆ decimal

qi::rule<Iter, string()> tptp_parser::decimal
Initial value:
=
zero_numeric | positive_decimal

◆ decimal_exponent

qi::rule<Iter, string()> tptp_parser::decimal_exponent
Initial value:
=
(decimal | decimal_fraction) >> exponent >> exp_integer

◆ decimal_fraction

qi::rule<Iter, string()> tptp_parser::decimal_fraction
Initial value:
=
decimal >> dot_decimal

◆ defined_constant

qi::rule<Iter, string()> tptp_parser::defined_constant
Initial value:
=
defined_functor

◆ defined_functor

qi::rule<Iter, string()> tptp_parser::defined_functor
Initial value:
=
ascii::string("$uminus")
| ascii::string("$sum")
| ascii::string("$difference")
| ascii::string("$product")
| ascii::string("$quotient")
| ascii::string("$quotient_e")
| ascii::string("$quotient_t")
| ascii::string("$quotient_f")
| ascii::string("$remainder_e")
| ascii::string("$remainder_t")
| ascii::string("$remainder_f")
| ascii::string("$floor")
| ascii::string("$ceiling")
| ascii::string("$truncate")
| ascii::string("$round")
| ascii::string("$to_int")
| ascii::string("$to_rat")
| ascii::string("$to_real")

◆ defined_infix_pred

qi::rule<Iter, string()> tptp_parser::defined_infix_pred
Initial value:
=
infix_equality

◆ defined_predicate

qi::rule<Iter, string()> tptp_parser::defined_predicate
Initial value:
=
ascii::string("$distinct")
| ascii::string("$less")
| ascii::string("$lesseq")
| ascii::string("$greater")
| ascii::string("$greatereq")
| ascii::string("$box_P")
| ascii::string("$box_int")
| ascii::string("$greater")
| ascii::string("$box")
| ascii::string("$dia_P")
| ascii::string("$dia_i")
| ascii::string("$dia_int")
| ascii::string("$dia")

◆ defined_proposition

qi::rule<Iter, string()> tptp_parser::defined_proposition
Initial value:
=
ascii::string("$true")
| ascii::string("$false")
| defined_predicate

◆ defined_term

qi::rule<Iter, string()> tptp_parser::defined_term
Initial value:
=
number | distinct_object

◆ distinct_object

qi::rule<Iter, string()> tptp_parser::distinct_object
Initial value:
=
double_quote
>> *(do_char)
>> double_quote

◆ do_char

qi::rule<Iter, char()> tptp_parser::do_char
Initial value:
=
qi::char_(' ', '!')
| qi::char_('#', '[')
| qi::char_(']', '~')
| ( lit('\\') >> ( qi::char_('"') | qi::char_('\\') ) )

◆ dollar

qi::rule<Iter, char()> tptp_parser::dollar
Initial value:
=
qi::char_('$')

◆ dollar_dollar_word

qi::rule<Iter, string()> tptp_parser::dollar_dollar_word
Initial value:
=
dollar
>> dollar
>> *(alpha_numeric)

◆ dollar_word

qi::rule<Iter, string()> tptp_parser::dollar_word
Initial value:
=
dollar
>> *(alpha_numeric)

◆ dot

qi::rule<Iter, char()> tptp_parser::dot
Initial value:
=
qi::char_('.')

◆ dot_decimal

qi::rule<Iter, string()> tptp_parser::dot_decimal
Initial value:
=
dot >> +(numeric)

◆ double_quote

qi::rule<Iter, char()> tptp_parser::double_quote
Initial value:
=
qi::char_('"')

◆ exp_integer

qi::rule<Iter, string()> tptp_parser::exp_integer
Initial value:
=
signed_exp_integer
| unsigned_exp_integer

◆ exponent

qi::rule<Iter, char()> tptp_parser::exponent
Initial value:
=
qi::char_("Ee")

◆ file_name

qi::rule<Iter, string()> tptp_parser::file_name
Initial value:
=
single_quoted

◆ fof_quantifier

qi::rule<Iter, string()> tptp_parser::fof_quantifier
Initial value:
=
ascii::string("!")
| ascii::string("?")

◆ formula_role

qi::rule<Iter, string()> tptp_parser::formula_role
Initial value:
=
ascii::string("axiom")
| ascii::string("hypothesis")
| ascii::string("definition")
| ascii::string("assumption")
| ascii::string("lemma")
| ascii::string("theorem")
| ascii::string("corollary")
| ascii::string("conjecture")
| ascii::string("negated_conjecture")
| ascii::string("plain")
| ascii::string("type")
| ascii::string("fi_domain")
| ascii::string("fi_functors")
| ascii::string("fi_predicates")
| ascii::string("unknown")

◆ functor

qi::rule<Iter, string()> tptp_parser::functor
Initial value:
=
atomic_word

◆ hash

qi::rule<Iter, string()> tptp_parser::hash
Initial value:
=
ascii::string("#")

◆ infix_equality

qi::rule<Iter, string()> tptp_parser::infix_equality
Initial value:
=
ascii::string("=")

◆ infix_inequality

qi::rule<Iter, string()> tptp_parser::infix_inequality
Initial value:
=
ascii::string("!=")

◆ integer

qi::rule<Iter, string()> tptp_parser::integer
Initial value:
=
signed_integer | unsigned_integer

◆ less_sign

qi::rule<Iter, string()> tptp_parser::less_sign
Initial value:
=
ascii::string("<")

◆ lower_alpha

qi::rule<Iter, char()> tptp_parser::lower_alpha
Initial value:
=
qi::char_('a','z')

◆ lower_word

qi::rule<Iter, string()> tptp_parser::lower_word
Initial value:
=
lower_alpha >> *(alpha_numeric)

◆ name

qi::rule<Iter, string()> tptp_parser::name
Initial value:
=
atomic_word | integer

◆ non_zero_numeric

qi::rule<Iter, char()> tptp_parser::non_zero_numeric
Initial value:
=
qi::char_('1','9')

◆ nonassoc_connective

qi::rule<Iter, string()> tptp_parser::nonassoc_connective
Initial value:
=
ascii::string("<=>")
| ascii::string("=>")
| ascii::string("<=")
| ascii::string("<~>")
| lexeme[ ascii::string("~") >> vline ]
| ascii::string("~&")

◆ not_star_slash

qi::rule<Iter, string()> tptp_parser::not_star_slash
Initial value:
=
*(*(qi::char_ - qi::char_('*'))
>> qi::char_('*')
>> *(qi::char_('*'))
>> (qi::char_ - (qi::char_('/') | qi::char_('*'))))
>> *(qi::char_ - qi::char_('*'))

◆ null

qi::rule<Iter> tptp_parser::null
Initial value:
=
eps

◆ number

qi::rule<Iter, string()> tptp_parser::number
Initial value:
=
integer | rational | real

◆ numeric

qi::rule<Iter, char()> tptp_parser::numeric
Initial value:
=
qi::char_('0','9')

◆ percentage_sign

qi::rule<Iter, char()> tptp_parser::percentage_sign
Initial value:
=
qi::char_('%')

◆ plus

qi::rule<Iter, string()> tptp_parser::plus
Initial value:
=
ascii::string("+")

◆ positive_decimal

qi::rule<Iter, string()> tptp_parser::positive_decimal
Initial value:
=
non_zero_numeric >> *(numeric)

◆ predicate

qi::rule<Iter, string()> tptp_parser::predicate
Initial value:
=
atomic_word

◆ printable_char

qi::rule<Iter, char()> tptp_parser::printable_char
Initial value:
=
qi::char_(' ', '~')

◆ proposition

qi::rule<Iter, string()> tptp_parser::proposition
Initial value:
=
predicate

◆ rational

qi::rule<Iter, string()> tptp_parser::rational
Initial value:
=
signed_rational | unsigned_rational

◆ real

qi::rule<Iter, string()> tptp_parser::real
Initial value:
=
signed_real | unsigned_real

◆ sign

qi::rule<Iter, char()> tptp_parser::sign
Initial value:
=
qi::char_("+-")

◆ signed_exp_integer

qi::rule<Iter, string()> tptp_parser::signed_exp_integer
Initial value:
=
sign >> unsigned_exp_integer

◆ signed_integer

qi::rule<Iter, string()> tptp_parser::signed_integer
Initial value:
=
sign >> unsigned_integer

◆ signed_rational

qi::rule<Iter, string()> tptp_parser::signed_rational
Initial value:
=
sign >> unsigned_rational

◆ signed_real

qi::rule<Iter, string()> tptp_parser::signed_real
Initial value:
=
sign >> unsigned_real

◆ single_quote

qi::rule<Iter, char()> tptp_parser::single_quote
Initial value:
=
qi::char_('\'')

◆ single_quoted

qi::rule<Iter, string()> tptp_parser::single_quoted
Initial value:
=
lit('\'')
>> sq_char
>> *(sq_char)
>> lit('\'')

◆ slash

qi::rule<Iter, string()> tptp_parser::slash
Initial value:
=
slash_char

◆ slash_char

qi::rule<Iter, char()> tptp_parser::slash_char
Initial value:
=
qi::char_('/')

◆ slosh

qi::rule<Iter, string()> tptp_parser::slosh
Initial value:
=
slosh_char

◆ slosh_char

qi::rule<Iter, char()> tptp_parser::slosh_char
Initial value:
=
qi::char_('\\')

◆ sq_char

qi::rule<Iter, char()> tptp_parser::sq_char
Initial value:
=
qi::char_(' ', '&')
| qi::char_('(', '[')
| qi::char_(']', '~')
| ( lit('\\') >> ( qi::char_('\'') | qi::char_('\\') ) )

◆ standard_comment

qi::rule<Iter, string()> tptp_parser::standard_comment
Initial value:
=
qi::char_('%')
>> *(printable_char)
>> eol

◆ star

qi::rule<Iter, string()> tptp_parser::star
Initial value:
=
ascii::string("*")

◆ status_comment

qi::rule<Iter, string(), ascii::space_type> tptp_parser::status_comment
Initial value:
=
qi::char_('%')
>> ascii::string("Status")
>> qi::char_(':')
>> comment_status[CommentStatus()]
>> lexeme[*(printable_char)]
>> eol
One of several basic semantic actions.
Definition TPTPParser.hpp:441

◆ system_constant

qi::rule<Iter, string()> tptp_parser::system_constant
Initial value:
=
system_functor

◆ system_functor

qi::rule<Iter, string()> tptp_parser::system_functor
Initial value:
=
atomic_system_word

◆ unary_connective

qi::rule<Iter, string()> tptp_parser::unary_connective
Initial value:
=
ascii::string("~")

◆ unsigned_exp_integer

qi::rule<Iter, string()> tptp_parser::unsigned_exp_integer
Initial value:
=
+(numeric)

◆ unsigned_integer

qi::rule<Iter, string()> tptp_parser::unsigned_integer
Initial value:
=
decimal

◆ unsigned_rational

qi::rule<Iter, string()> tptp_parser::unsigned_rational
Initial value:
=
decimal >> slash >> positive_decimal

◆ unsigned_real

qi::rule<Iter, string()> tptp_parser::unsigned_real
Initial value:
=
decimal_fraction | decimal_exponent

◆ upper_alpha

qi::rule<Iter, char()> tptp_parser::upper_alpha
Initial value:
=
qi::char_('A','Z')

◆ upper_word

qi::rule<Iter, string()> tptp_parser::upper_word
Initial value:
=
upper_alpha
>> *(alpha_numeric)

◆ variable

qi::rule<Iter, string()> tptp_parser::variable
Initial value:
=
upper_word

◆ viewable_char

qi::rule<Iter, char()> tptp_parser::viewable_char
Initial value:
=
printable_char | eol

◆ vline

qi::rule<Iter, string()> tptp_parser::vline
Initial value:
=
ascii::string("|")

◆ zero_numeric

qi::rule<Iter, char()> tptp_parser::zero_numeric
Initial value:
=
qi::char_('0')