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