File: GAMESSDatParserLexer.l

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 239,888 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 95
file content (126 lines) | stat: -rw-r--r-- 4,031 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
%{
#include <BALL/FORMAT/GAMESSDatFile.h>
#include <BALL/COMMON/parserDefinitions.h>

using namespace BALL;


#include "GAMESSDatParserParser.h"
#include <string.h>

#define YY_INPUT(buf,result,max_size) \
{ \
	((std::istream*)GAMESSDatFile::state.current_parser)->read(buf, max_size);\
	result = GAMESSDatFile::state.current_parser->gcount();\
}

%}

%s in_block
%s in_data_block
%s in_zmat_block
%s in_vec_block
%s in_coord_line

%option noyywrap
%option nounput

COMMENT	!
BLOCK_END		[[:space:]]*$[eE][nN][dD]
BLOCK_START [[:space:]]*$[a-zA-Z]*
DATA_BLOCK_START [[:space:]]*$[dD][aA][tT][aA]
ZMAT_BLOCK_START [[:space:]]*$[zZ][mM][aA][tT]
VEC_BLOCK_START  [[:space:]]*$[vV][eE][cC]([[:digit:]]*)

INT		[+-]?[0-9]+
FLOAT	[+-]?[0-9]+"."[0-9]+

ATOM_START ^[[:blank:]]*[[:alnum:]]+
ATOM_LINE	[[:blank:]]+{FLOAT}[[:blank:]]+{FLOAT}[[:blank:]]+{FLOAT}[[:blank:]]+{FLOAT}[[:space:]]*

VALID_START	[^$][^eE][^nN][^dD]
VALID_END		[[:blank:]]+.*\n|\n

ZMAT_BOND_START	 					[[:blank:]]*1[[:space:]]*,
ZMAT_BOND_ANGLE_START 		[[:blank:]]*2[[:space:]]*,
ZMAT_DIHEDRAL_ANGLE_START [[:blank:]]*3[[:space:]]*,
ZMAT_ATOM_PLANE 					[[:blank:]]*4[[:space:]]*,
ZMAT_LINEAR_BEND					[[:blank:]]*5[[:space:]]*,
ZMAT_DIHEDRAL_PLANE				[[:blank:]]*6[[:space:]]*,
ZMAT_GHOST_TORSION				[[:blank:]]*7[[:space:]]*,

ZMAT_TWO_NUM		[[:space:]]*({INT}|{FLOAT})[[:space:]]*,[[:space:]]*({INT}|{FLOAT})
ZMAT_THREE_NUM	([[:space:]]*({INT}|{FLOAT})[[:space:]]*,){2}[[:space:]]*({INT}|{FLOAT})
ZMAT_FOUR_NUM	  ([[:space:]]*({INT}|{FLOAT})[[:space:]]*,){3}[[:space:]]*({INT}|{FLOAT})
ZMAT_FIVE_NUM		([[:space:]]*({INT}|{FLOAT})[[:space:]]*,){4}[[:space:]]*({INT}|{FLOAT})
ZMAT_SIX_NUM	  ([[:space:]]*({INT}|{FLOAT})[[:space:]]*,){5}[[:space:]]*({INT}|{FLOAT})

%%

{COMMENT}+.*$					  {GAMESSDatParserlval.text = yytext; return(TK_COMMENT);}
{BLOCK_END}/{VALID_END}	{BEGIN(INITIAL); return(TK_BLOCK_END);}
{DATA_BLOCK_START}/{VALID_END}			{BEGIN(in_data_block); return(TK_DATA_BLOCK_START);}
{ZMAT_BLOCK_START}/{VALID_END}		{BEGIN(in_zmat_block); return(TK_ZMAT_BLOCK_START);}
{VEC_BLOCK_START}/{VALID_END}		{BEGIN(in_vec_block); return(TK_VEC_BLOCK_START);}
{BLOCK_START}/{VALID_END}					{GAMESSDatParserlval.text = yytext+1; BEGIN(in_block); return(TK_BLOCK_START);}
<in_block>[[:alnum:]\.()+\-]*	{GAMESSDatParserlval.text = strdup(yytext); return(TK_DATA);}
<in_block>=							{return(TK_EQUALS);}
<in_block>^[^=\n]*$				{GAMESSDatParserlval.text = yytext; return(TK_LINE);}
<in_data_block>{ATOM_START}/{ATOM_LINE} {BEGIN(in_coord_line);GAMESSDatParserlval.text = strdup(yytext); return TK_ATOM;}
<in_coord_line>{FLOAT}$	{GAMESSDatParserlval.value	= atof(yytext); BEGIN(in_data_block); return(TK_FLOAT);}
<in_coord_line>{FLOAT}	{GAMESSDatParserlval.value	= atof(yytext); return(TK_FLOAT);}

<in_zmat_block>[[:space:]]*[a-zA-Z][[:alnum:][:blank:]()]*/=	{GAMESSDatParserlval.text = yytext; return(TK_GROUP);}

<in_zmat_block>{ZMAT_BOND_START}{ZMAT_TWO_NUM}	{
	GAMESSDatParserlval.text = yytext;
	return(TK_BOND);
}

<in_zmat_block>{ZMAT_BOND_ANGLE_START}{ZMAT_THREE_NUM}	{
	GAMESSDatParserlval.text = yytext;
	return(TK_LINE);
}

<in_zmat_block>{ZMAT_DIHEDRAL_ANGLE_START}{ZMAT_FOUR_NUM}	{
	GAMESSDatParserlval.text = yytext;
	return(TK_LINE);
}

<in_zmat_block>{ZMAT_ATOM_PLANE}{ZMAT_FOUR_NUM}	{
	GAMESSDatParserlval.text = yytext;
	return(TK_LINE);
}

<in_zmat_block>{ZMAT_LINEAR_BEND}{ZMAT_THREE_NUM}	{
	GAMESSDatParserlval.text = yytext;
	return(TK_LINE);
}

<in_zmat_block>{ZMAT_DIHEDRAL_PLANE}{ZMAT_FIVE_NUM}	{
	GAMESSDatParserlval.text = yytext;
	return(TK_LINE);
}

<in_zmat_block>{ZMAT_GHOST_TORSION}{ZMAT_SIX_NUM}	{
	GAMESSDatParserlval.text = yytext;
	return(TK_LINE);
}

<in_zmat_block>,|\n	{}

<in_data_block,in_vec_block,INITIAL>^.*$			{GAMESSDatParserlval.text = yytext; return(TK_LINE);}
<*>.|\n										{}
%%

/**YY_BUFFER_STATE SmilesParser_buffer;
void SmilesParser_initBuffer(const char* buf)
{
	SmilesParser_buffer = SmilesParser_scan_string(buf);
}

void SmilesParser_delBuffer()
{
	SmilesParser_delete_buffer(SmilesParser_buffer);
}
**/