#ifndef VCZH_PARSING_PARSINGAUTOMATON
#define VCZH_PARSING_PARSINGAUTOMATON
#include "ParsingAnalyzer.h"
#include "ParsingTable.h"
namespace
{
namespace
{
namespace
{
class
;
class
;
class
;
class
:
public
{
public
:
enum
{
,
,
,
,
,
,
,
};
;
*
;
*
;
definitions
::
ParsingDefinitionRuleDefinition
*
;
*
;
*
;
();
();
};
class
:
public
{
public
:
enum
{
,
,
,
,
,
,
};
enum
{
,
,
,
};
*
;
*
;
collections
::
<
<
>>
;
;
;
*
;
();
();
static
bool
(
*
,
*
,
bool
);
};
class
:
public
{
public
:
enum
{
,
,
};
collections
::
<
*>
;
collections
::
<
*>
;
bool
;
*
;
definitions
::
ParsingDefinitionRuleDefinition
*
;
definitions
::
*
;
definitions
::
*
;
;
;
;
();
();
};
class
:
public
{
public
:
*
;
*
;
*
;
collections
::
<
*>
;
int
;
();
();
};
class
:
public
{
typedef
collections
::
<
definitions
::
ParsingDefinitionRuleDefinition
*>
;
typedef
collections
::
<
definitions
::
ParsingDefinitionRuleDefinition
*,
<
>>
;
public
:
*
;
collections
::
<
<
>>
;
collections
::
<
<
>>
;
collections
::
<
<
>>
;
;
;
(
*
);
();
void
(
definitions
::
ParsingDefinitionRuleDefinition
*
,
<
>
);
*
(
definitions
::
ParsingDefinitionRuleDefinition
*
);
*
(
definitions
::
ParsingDefinitionRuleDefinition
*
);
*
(
definitions
::
ParsingDefinitionRuleDefinition
*
);
*
(
definitions
::
ParsingDefinitionRuleDefinition
*
,
definitions
::
*
,
definitions
::
*
);
*
(
definitions
::
ParsingDefinitionRuleDefinition
*
,
definitions
::
*
,
definitions
::
*
);
*
(
*
);
*
(
*
,
*
);
*
(
*
,
*
);
*
(
*
,
*
);
*
(
*
,
*
);
*
(
*
,
*
);
*
(
*
,
*
);
*
(
*
,
*
,
*
);
*
(
*
,
*
,
*
);
void
(
*
);
void
(
*
);
};
struct
{
enum
{
,
,
,
};
*
;
<
collections
::
<
*>>
;
bool
;
()
:state(
0
)
,cycle(
false
)
{
}
(
*
,
<
collections
::
<
*>>
,
bool
)
:state(
)
,transitions(
)
,cycle(
)
{
}
};
extern
void
(
::
(*
)(
*),
*
,
collections
::
<
>&
);
extern
void
(
collections
::
<
*,
*>&
,
collections
::
<
*>&
,
<
>
);
extern
void
(
<
>
,
<
>
,
collections
::
<
*>&
);
extern
void
(
<
>
,
<
>
,
collections
::
<
*>&
);
extern
<
>
(
<
definitions
::
>
,
*
);
extern
<
>
CreateNondeterministicPDAFromEpsilonPDA
(
<
>
);
extern
<
>
CreateJointPDAFromNondeterministicPDA
(
<
>
);
extern
void
(
<
>
);
extern
void
MarkLeftRecursiveInJointPDA
(
<
>
,
collections
::
<
<
>>&
);
extern
GetTypeNameForCreateInstruction
(
*
);
extern
<
tabling
::
>
(
<
definitions
::
>
,
*
,
<
>
,
bool
,
collections
::
<
<
>>&
);
extern
<
tabling
::
>
(
<
definitions
::
>
,
bool
,
collections
::
<
<
>>&
);
extern
void
(
<
>
,
stream
::
&
);
}
}
}
#endif