book/atccl.lex
author Eugen Sawin <sawine@me73.com>
Mon, 28 Mar 2011 19:25:26 +0200
changeset 8 baaaa26809cf
permissions -rw-r--r--
Final corrections.
sawine@1
     1
%{
sawine@1
     2
#include <stdio.h>
sawine@1
     3
#include <string.h>
sawine@1
     4
#include "atccl_parser.tab.h"
sawine@1
     5
sawine@1
     6
int line_no = 1;
sawine@1
     7
char line_buffer[1024];
sawine@1
     8
char* installId();
sawine@1
     9
sawine@1
    10
%}
sawine@1
    11
sawine@1
    12
%option nounput
sawine@1
    13
sawine@1
    14
delim			[ \t]
sawine@1
    15
ws			{delim}+
sawine@1
    16
letter 			[A-Za-z]
sawine@1
    17
digit			[0-9]
sawine@1
    18
id			{letter}({letter}|{digit}|_)*
sawine@1
    19
real			{digit}+\.{digit}+
sawine@1
    20
sawine@1
    21
%%
sawine@1
    22
sawine@1
    23
copx			{ return COPX; }
sawine@1
    24
adep			{ return ADEP; }
sawine@1
    25
ades			{ return ADES; }
sawine@1
    26
rwy			{ return RWY; }
sawine@1
    27
route			{ return ROUTE; }
sawine@1
    28
atyp			{ return ATYP; }
sawine@1
    29
equip			{ return EQUIP; }
sawine@1
    30
tas			{ return TAS; }
sawine@1
    31
frul			{ return FRUL; }
sawine@1
    32
ftyp			{ return FTYP; }
sawine@1
    33
travel_type 		{ return TRAVEL_TYPE; }
sawine@1
    34
time_separation		{ return TIMESEP; }
sawine@1
    35
time_sep		{ return TIMESEP; }
sawine@1
    36
fl			{ return FL; }
sawine@1
    37
constraint		{ return CONSTRNT; }
sawine@1
    38
pattern			{ return PATTERN; }
sawine@1
    39
flowpoint		{ return FLOWP; }
sawine@1
    40
sawine@1
    41
sawine@1
    42
is			{ return IS; }
sawine@1
    43
in			{ return IN; }
sawine@1
    44
not			{ return NOT; }
sawine@1
    45
less			{ return LESS; }
sawine@1
    46
greater			{ return GREATER; }
sawine@1
    47
than			{ return THAN; }
sawine@1
    48
and			{ return AND; }
sawine@1
    49
or			{ return OR; }
sawine@1
    50
at			{ return AT; }
sawine@1
    51
from			{ return FROM; }
sawine@1
    52
until			{ return UNTIL; }
sawine@1
    53
on			{ return ON; }
sawine@1
    54
 
sawine@1
    55
{digit}+		{ yylval.integer = atoi(yytext); return INTEGER; }
sawine@1
    56
{real}			{ yylval.real = atof(yytext); return REAL; }
sawine@1
    57
{id}			{ yylval.string = installId(); return STRING; }
sawine@1
    58
\"			{ return QUOTE; }
sawine@1
    59
#.*$			{ return COM; }
sawine@1
    60
{ws}			{  }
sawine@1
    61
\n.*			{ strcpy(line_buffer, yytext+1); line_no++; yyless(1); }
sawine@1
    62
.			{ return yytext[0]; }
sawine@1
    63
%%
sawine@1
    64
sawine@1
    65
char* installId()
sawine@1
    66
{
sawine@1
    67
	static char* no_string = "$$$NO STRING$$$";
sawine@1
    68
	char* id = no_string;
sawine@1
    69
	if (id_table_no < MAX_ID_TABLE_NO)
sawine@1
    70
	{
sawine@1
    71
		id = strdup(yytext);
sawine@1
    72
		id_table[id_table_no++] = id;
sawine@1
    73
	}
sawine@1
    74
	else
sawine@1
    75
	{
sawine@1
    76
		yyerror("Maximum number of string literals used");
sawine@1
    77
	}	
sawine@1
    78
	return id;
sawine@1
    79
}