stage1_2/iec_flex.ll
author Mario de Sousa <msousa@fe.up.pt>
Tue, 04 Apr 2017 17:21:42 +0100
changeset 1046 292b7dcf14f6
parent 1031 ce026aee03e0
child 1050 bdc21971f95d
permissions -rw-r--r--
fix bug in symbol_c::find_element()
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
     1
/*
264
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
     2
 *  matiec - a compiler for the programming languages defined in IEC 61131-3
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
     3
 *
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
     4
 *  Copyright (C) 2003-2011  Mario de Sousa (msousa@fe.up.pt)
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
     5
 *
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
     6
 *  This program is free software: you can redistribute it and/or modify
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
     7
 *  it under the terms of the GNU General Public License as published by
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
     8
 *  the Free Software Foundation, either version 3 of thest_whitespaceLicense, or
264
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
     9
 *  (at your option) any later version.
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    10
 *
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    11
 *  This program is distributed in the hope that it will be useful,
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    14
 *  GNU General Public License for more details.
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    15
 *
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    16
 *  You should have received a copy of the GNU General Public License
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    17
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    18
 *
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    19
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    20
 * This code is made available on the understanding that it will not be
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    21
 * used in safety-critical situations without a full and competent review.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    22
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    23
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    24
/*
264
6facabd9c2cd Updating License info (with Edoaurd's permission for relevant files).
Mario de Sousa <msousa@fe.up.pt>
parents: 257
diff changeset
    25
 * An IEC 61131-3 compiler.
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    26
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    27
 * Based on the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    28
 * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    29
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    30
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    31
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    32
/*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    33
 * Stage 1
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    34
 * =======
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    35
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    36
 * This file contains the lexical tokens definitions, from which
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    37
 * the flex utility will generate a lexical parser function.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    38
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    39
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    40
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    41
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    42
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    43
/*****************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    44
/* Lexical Parser Options... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    45
/*****************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    46
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    47
/* The lexical analyser will never work in interactive mode,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    48
 * i.e., it will only process programs saved to files, and never
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    49
 * programs being written inter-actively by the user.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    50
 * This option saves the resulting parser from calling the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    51
 * isatty() function, that seems to be generating some compile
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    52
 * errors under some (older?) versions of flex.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    53
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    54
%option never-interactive
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    55
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    56
/* Have the lexical analyser use a 'char *yytext' instead of an
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    57
 * array of char 'char yytext[??]' to store the lexical token.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    58
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    59
%pointer
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    60
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    61
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    62
/* Have the lexical analyser ignore the case of letters.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    63
 * This will occur for all the tokens and keywords, but
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    64
 * the resulting text handed up to the syntax parser
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    65
 * will not be changed, and keep the original case
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    66
 * of the letters in the input file.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    67
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    68
%option case-insensitive
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    69
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    70
/* Have the generated lexical analyser keep track of the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    71
 * line number it is currently analysing.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    72
 * This is used to pass up to the syntax parser
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    73
 * the number of the line on which the current
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    74
 * token was found. It will enable the syntax parser
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    75
 * to generate more informatve error messages...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    76
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    77
%option yylineno
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    78
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    79
/* required for the use of the yy_pop_state() and
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    80
 * yy_push_state() functions
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    81
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    82
%option stack
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    83
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    84
/* The '%option stack' also requests the inclusion of 
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    85
 * the yy_top_state(), however this function is not
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    86
 * currently being used. This means that the compiler
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    87
 * is complaining about the existance of this function.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    88
 * The following option removes the yy_top_state()
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    89
 * function from the resulting c code, so the compiler 
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    90
 * no longer complains.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    91
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    92
%option noyy_top_state
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    93
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
    94
/* We will be using unput() in our flex code, so we cannot set the following option!... */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
    95
/*
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
    96
%option nounput
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
    97
*/
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
    98
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
    99
/**************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   100
/* External Variable and Function declarations... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   101
/**************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   102
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   103
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   104
%{
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   105
/* Define TEST_MAIN to include a main() function.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   106
 * Useful for testing the parser generated by flex.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   107
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   108
/*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   109
#define TEST_MAIN
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   110
*/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   111
/* If lexical parser is compiled by itself, we need to define the following
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   112
 * constant to some string. Under normal circumstances LIBDIRECTORY is set
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   113
 * in the syntax parser header file...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   114
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   115
#ifdef TEST_MAIN
40
873a5b60a7ea Fixed -I library include path behavior + removed old lib implementation + added generated lib func names to stage 1_2 + added Makefile.Linux
etisserant
parents: 15
diff changeset
   116
#define DEFAULT_LIBDIR "just_testing"
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   117
#endif
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   118
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   119
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   120
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   121
/* Required for strdup() */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   122
#include <string.h>
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   123
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   124
/* Required only for the declaration of abstract syntax classes
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   125
 * (class symbol_c; class token_c; class list_c;)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   126
 * These will not be used in flex, but the token type union defined
822
a7d9e0b8636b Fix build on Ubuntu 13.10
Edouard Tisserant
parents: 793
diff changeset
   127
 * in iec_bison.hh contains pointers to these classes, so we must include
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   128
 * it here.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   129
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   130
#include "../absyntax/absyntax.hh"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   131
15
0b472e25eb16 Adding changes to make the compiler compatible with bison ver 2.3
mario
parents: 13
diff changeset
   132
822
a7d9e0b8636b Fix build on Ubuntu 13.10
Edouard Tisserant
parents: 793
diff changeset
   133
/* iec_bison.hh is generated by bison.
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   134
 * Contains the definition of the token constants, and the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   135
 * token value type YYSTYPE (in our case, a 'const char *')
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   136
 */
822
a7d9e0b8636b Fix build on Ubuntu 13.10
Edouard Tisserant
parents: 793
diff changeset
   137
#include "iec_bison.hh"
15
0b472e25eb16 Adding changes to make the compiler compatible with bison ver 2.3
mario
parents: 13
diff changeset
   138
#include "stage1_2_priv.hh"
0b472e25eb16 Adding changes to make the compiler compatible with bison ver 2.3
mario
parents: 13
diff changeset
   139
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   140
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   141
/* Variable defined by the bison parser,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   142
 * where the value of the tokens will be stored
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   143
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   144
extern YYSTYPE yylval;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   145
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   146
/* The name of the file currently being parsed...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   147
 * Note that flex accesses and updates this global variable
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   148
 * apropriately whenever it comes across an (*#include <filename> *) directive...
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   149
 */
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   150
const char *current_filename = NULL;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   151
15
0b472e25eb16 Adding changes to make the compiler compatible with bison ver 2.3
mario
parents: 13
diff changeset
   152
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   153
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   154
/* Variable defined by the bison parser.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   155
 * It must be initialised with the location
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   156
 * of the token being parsed.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   157
 * This is only needed if we want to keep
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   158
 * track of the locations, in order to give
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   159
 * more meaningful error messages!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   160
 */
415
5c115720149c Fix YYLTYPE declaration.
Manuele Conti <conti.ma@alice.it>
parents: 354
diff changeset
   161
/*
5c115720149c Fix YYLTYPE declaration.
Manuele Conti <conti.ma@alice.it>
parents: 354
diff changeset
   162
 *extern YYLTYPE yylloc;
5c115720149c Fix YYLTYPE declaration.
Manuele Conti <conti.ma@alice.it>
parents: 354
diff changeset
   163
b*/
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
   164
#define YY_INPUT(buf,result,max_size)  {\
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
   165
    result = GetNextChar(buf, max_size);\
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
   166
    if (  result <= 0  )\
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
   167
      result = YY_NULL;\
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
   168
    }
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
   169
287
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   170
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   171
/* Macro that is executed for every action.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   172
 * We use it to pass the location of the token
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   173
 * back to the bison parser...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   174
 */
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
   175
#define YY_USER_ACTION {\
287
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   176
	yylloc.first_line = current_tracking->lineNumber;			\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   177
	yylloc.first_column = current_tracking->currentTokenStart;		\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   178
	yylloc.first_file = current_filename;					\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   179
	yylloc.first_order = current_order;					\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   180
	yylloc.last_line = current_tracking->lineNumber;			\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   181
	yylloc.last_column = current_tracking->currentChar - 1;			\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   182
	yylloc.last_file = current_filename;					\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   183
	yylloc.last_order = current_order;					\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   184
	current_tracking->currentTokenStart = current_tracking->currentChar;	\
9df7fcb9bde5 Added tracking of order by which tokens are processed by lexical analyser.
Mario de Sousa <msousa@fe.up.pt>
parents: 286
diff changeset
   185
	current_order++;							\
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   186
	}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   187
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   188
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   189
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   190
/* Since this lexical parser we defined only works in ASCII based
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   191
 * systems, we might as well make sure it is being compiled on
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   192
 * one...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   193
 * Lets check a few random characters...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   194
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   195
#if (('a' != 0x61) || ('A' != 0x41) || ('z' != 0x7A) || ('Z' != 0x5A) || \
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   196
     ('0' != 0x30) || ('9' != 0x39) || ('(' != 0x28) || ('[' != 0x5B))
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   197
#error This lexical analyser is not portable to a non ASCII based system.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   198
#endif
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   199
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   200
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   201
/* Function only called from within flex, but defined
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   202
 * in iec.y!
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
   203
 * We declare it here...
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   204
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   205
 * Search for a symbol in either of the two symbol tables
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   206
 * and return the token id of the first symbol found.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   207
 * Searches first in the variables, and only if not found
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   208
 * does it continue searching in the library elements
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   209
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   210
//token_id_t get_identifier_token(const char *identifier_str);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   211
int get_identifier_token(const char *identifier_str);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   212
%}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   213
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   214
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   215
/***************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   216
/* Forward Declaration of functions defined later. */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   217
/***************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   218
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   219
%{
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   220
/* return all the text in the current token back to the input stream. */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   221
void unput_text(unsigned int n);
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   222
/* return all the text in the current token back to the input stream, 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   223
 * but first return to the stream an additional character to mark the end of the token. 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   224
 */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   225
void unput_and_mark(const char c);
756
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
   226
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
   227
void include_file(const char *include_filename);
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   228
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   229
/* The body_state tries to find a ';' before a END_PROGRAM, END_FUNCTION or END_FUNCTION_BLOCK or END_ACTION
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   230
 * To do so, it must ignore comments and pragmas. This means that we cannot do this in a signle lex rule.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   231
 * However, we must store any text we consume in every rule, so we can push it back into the buffer
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   232
 * once we have decided if we are parsing ST or IL code. The following functions manage that buffer used by
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   233
 * the body_state.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   234
 */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   235
void  append_bodystate_buffer(const char *yytext);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   236
void   unput_bodystate_buffer(void);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   237
int  isempty_bodystate_buffer(void);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   238
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   239
int GetNextChar(char *b, int maxBuffer);
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   240
%}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   241
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   242
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   243
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   244
/****************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   245
/* Lexical Parser States... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   246
/****************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   247
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   248
/* NOTE: Our psrser can parse st or il code, intermixed
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   249
 *       within the same file.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   250
 *       With IL we come across the issue of the EOL (end of line) token.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   251
 *       ST, and the declaration parts of IL do not use this token!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   252
 *       If the lexical analyser were to issue this token during ST
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   253
 *       language parsing, or during the declaration of data types,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   254
 *       function headers, etc. in IL, the syntax parser would crash.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   255
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   256
 *       We can solve this issue using one of three methods:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   257
 *        (1) Augment all the syntax that does not accept the EOL
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   258
 *            token to simply ignore it. This makes the syntax
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   259
 *            definition (in iec.y) very cluttered!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   260
 *        (2) Let the lexical parser figure out which language
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   261
 *            it is parsing, and decide whether or not to issue
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   262
 *            the EOL token. This requires the lexical parser
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   263
 *            to have knowledge of the syntax!, making for a poor
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   264
 *            overall organisation of the code. It would also make it
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   265
 *            very difficult to understand the lexical parser as it
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   266
 *            would use several states, and a state machine to transition
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   267
 *            between the states. The state transitions would be
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   268
 *            intermingled with the lexical parser defintion!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   269
 *        (3) Use a mixture of (1) and (2). The lexical analyser
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   270
 *            merely distinguishes between function headers and function
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   271
 *            bodies, but no longer makes a distinction between il and
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   272
 *            st language bodies. When parsing a body, it will return
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   273
 *            the EOL token. In other states '\n' will be ignored as
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   274
 *            whitespace.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   275
 *            The ST language syntax has been augmented in the syntax
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   276
 *            parser configuration to ignore any EOL tokens that it may
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   277
 *            come across!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   278
 *            This option has both drawbacks of option (1) and (2), but
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   279
 *            much less intensely.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   280
 *            The syntax that gets cluttered is limited to the ST statements
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   281
 *            (which is rather limited, compared to the function headers and
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   282
 *            data type declarations, etc...), while the state machine in
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   283
 *            the lexical parser becomes very simple. All state transitions
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   284
 *            can be handled within the lexical parser by itself, and can be
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   285
 *            easily identified. Thus knowledge of the syntax required by
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   286
 *            the lexical parser is very limited!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   287
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   288
 * Amazingly enough, I (Mario) got to implement option (3)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   289
 * at first, requiring two basic states, decl and body.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   290
 * The lexical parser will enter the body state when
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   291
 * it is parsing the body of a function/program/function block. The
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   292
 * state transition is done when we find a VAR_END that is not followed
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   293
 * by a VAR! This is the syntax knowledge that gets included in the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   294
 * lexical analyser with this option!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   295
 * Unfortunately, getting the st syntax parser to ignore EOL anywhere
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   296
 * where they might appear leads to conflicts. This is due to the fact
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   297
 * that the syntax parser uses the single look-ahead token to remove
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   298
 * possible conflicts. When we insert a possible EOL, the single
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   299
 * look ahead token becomes the EOL, which means the potential conflicts
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   300
 * could no longer be resolved.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   301
 * Removing these conflicts would make the st syntax parser very convoluted,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   302
 * and adding the extraneous EOL would make it very cluttered.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   303
 * This option was therefore dropped in favour of another!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   304
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   305
 * I ended up implementing (2). Unfortunately the lexical analyser can
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   306
 * not easily distinguish between il and st code, since function
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   307
 * calls in il are very similar to function block calls in st.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   308
 * We therefore use an extra 'body' state. When the lexical parser
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   309
 * finds that last END_VAR, it enters the body state. This state
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   310
 * must figure out what language is being parsed from the first few
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   311
 * tokens, and switch to the correct state (st, il or sfc) according to the
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   312
 * language. This means that we insert quite a bit of knowledge of the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   313
 * syntax of the languages into the lexical parser. This is ugly, but it
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   314
 * works, and at least it is possible to keep all the state changes together
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   315
 * to make it easier to remove them later on if need be.
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   316
 * Once the language being parsed has been identified, 
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   317
 * the body state returns any matched text back to the buffer with unput(),
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   318
 * to be later matched correctly by the apropriate language parser (st, il or sfc).
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   319
 *
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   320
 * Aditionally, in sfc state it may further recursively enter the body state
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   321
 * once again. This is because an sfc body may contain ACTIONS, which are then
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   322
 * written in one of the three languages (ST, IL or SFC), so once again we need
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   323
 * to figure out which language the ACTION in the SFC was written in. We already
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   324
 * ahve all that done in the body state, so we recursively transition to the body 
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   325
 * state once again.
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   326
 * Note that in this case, when coming out of the st/il state (whichever language
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   327
 * the action was written in) the sfc state will become active again. This is done by
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   328
 * pushing and poping the previously active state!
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   329
 *
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   330
 * The sfc_qualifier_state is required because when parsing actions within an
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   331
 * sfc, we will be expecting action qualifiers (N, P, R, S, DS, SD, ...). In order
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   332
 * to bison to work correctly, these qualifiers must be returned as tokens. However,
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   333
 * these tokens are not reserved keywords, which means it should be possible to
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   334
 * define variables/functions/FBs with any of these names (including 
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   335
 * S and R which are special because they are also IL operators). So, when we are not
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   336
 * expecting any action qualifiers, flex does not return these tokens, and is free
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   337
 * to interpret them as previously defined variables/functions/... as the case may be.
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   338
 *
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   339
 * The time_literal_state is required because TIME# literals are decomposed into 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   340
 * portions, and wewant to send these portions one by one to bison. Each poertion will 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   341
 * represent the value in days/hours/minutes/seconds/ms.
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   342
 * Unfortunately, some of these portions may also be lexically analysed as an identifier. So,
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   343
 * we need to disable lexical identification of identifiers while parsing TIME# literals!
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   344
 * e.g.:  TIME#55d_4h_56m
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   345
 *       We would like to return to bison the tokens 'TIME' '#' '55d' '_' '4h' '_' '56m'
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   346
 *       Unfortunately, flex will join '_' and '4h' to create a legal {identifier} '_4h',
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   347
 *       and return that identifier instead! So, we added this state!
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   348
 *
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   349
 * The ignore_pou_state state is only used when bison says it is doing the pre-parsing.
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   350
 * During pre-parsing, the main state machine will only transition between
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   351
 * INITIAL and ignore_pou_state, and from here back to INITIAL. All other
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   352
 * transitions are inhibited. This inhibition is actually just enforced by making
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   353
 * sure that the INITIAL ---> ignore_pou_state transition is tested before all other
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   354
 * transitions coming out of INITIAL state. All other transitions are unaffected, as they
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   355
 * never get a chance to be evaluated when bison is doing pre-parsing.
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   356
 * Pre-parsing is a first quick scan through the whole input source code simply
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   357
 * to determine the list of POUs and datatypes that will be defined in that
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   358
 * code. Basically, the objective is to fill up the previously_declared_xxxxx
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   359
 * maps, without processing the code itself. Once these maps have been filled up,
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   360
 * bison will throw away the AST (abstract syntax tree) created up to that point, 
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   361
 * and scan through the same source code again, but this time creating a correct AST.
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   362
 * This pre-scan allows the source code to reference POUs and datatypes that are
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   363
 * only declared after they are used!
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   364
 * 
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   365
 *
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   366
 * Here is a main state machine...
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   367
 *                                                                         --+  
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   368
 *                                                                           |  these states are
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   369
 *              +------------> get_pou_name_state  ----> ignore_pou_state    |  only active 
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   370
 *              |                                            |               |  when bison is 
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   371
 *              |  ------------------------------------------+               |  doing the 
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   372
 *              |  |                                                         |  pre-parsing!!
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   373
 *              |  v                                                       --+
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   374
 *       +---> INITIAL <-------> config
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   375
 *       |        \
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   376
 *       |        V
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   377
 *       |   header_state
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   378
 *       |        |
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   379
 *       |        V
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   380
 *     vardecl_list_state <------> var_decl
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   381
 *       ^        | 
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   382
 *       |        | [using push()]
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   383
 *       |        |
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   384
 *       |        V
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   385
 *       |       body, 
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   386
 *       |        |
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   387
 *       |        | 
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   388
 *       |   -------------------
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   389
 *       |   |       |         |
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   390
 *       |   v       v         v
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   391
 *       |  st      il        sfc
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   392
 *       |   |       |         |  [using pop() when leaving st/il/sfc => goes to vardecl_list_state]
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   393
 *       |   |       |         |
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   394
 *       -----------------------
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   395
 *
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   396
 * NOTE:- When inside sfc, and an action or transition in ST/IL is found, then 
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   397
 *        we also push() to the body state. This means that sometimes, when pop()ing
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   398
 *        from st and il, the state machine may return to the sfc state!
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   399
 *      - The transitions form sfc to body will be decided by bison, which will
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   400
 *        tell flex to do the transition by calling cmd_goto_body_state().
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   401
 *   
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   402
 * 
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   403
 * Possible state changes are:
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   404
 *   INITIAL -> goto(ignore_pou_state)
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   405
 *               (This transition state is only used when bison says it is doing the pre-parsing.)
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   406
 *               (This transition takes precedence over all other transitions!)
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   407
 *               (when a FUNCTION, FUNCTION_BLOCK, PROGRAM or CONFIGURATION is found)
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   408
 * 
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   409
 *   INITIAL -> goto(config_state)
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   410
 *                (when a CONFIGURATION is found)
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   411
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   412
 *   INITIAL -> goto(header_state)
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   413
 *               (when a FUNCTION, FUNCTION_BLOCK, or PROGRAM is found)
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   414
 * 
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   415
 *   header_state -> goto(vardecl_list_state)
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   416
 *               (When the first VAR token is found, i.e. at begining of first VAR .. END_VAR declaration)
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   417
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   418
 *  vardecl_list_state -> push current state (vardecl_list_state), and goto(vardecl_state) 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   419
 *                (when a VAR token is found)
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   420
 *   vardecl_state -> pop() to (vardecl_list_state) 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   421
 *                (when a END_VAR token is found)
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   422
 * 
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   423
 *   vardecl_list_state -> push current state (vardecl_list_state), and goto(body_state) 
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   424
 *                (when the last END_VAR is found!)
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   425
 *
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   426
 *   body_state    -> goto(sfc_state)
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   427
 *                     (when it figures out it is parsing sfc language)
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   428
 *   body_state    -> goto(st_state)
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   429
 *                     (when it figures out it is parsing st language)
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   430
 *   body_state    -> goto(il_state)
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   431
 *                     (when it figures out it is parsing il language)
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   432
 *   st_state      -> pop() to vardecl_list_state
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   433
 *                     (when a END_FUNCTION, END_FUNCTION_BLOCK, END_PROGRAM,
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   434
 *                      END_ACTION or END_TRANSITION is found)
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   435
 *   il_state      -> pop() to vardecl_list_state
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   436
 *                     (when a END_FUNCTION, END_FUNCTION_BLOCK, END_PROGRAM,
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   437
 *                      END_ACTION or END_TRANSITION is found)
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   438
 *   sfc_state     -> pop() to vardecl_list_state
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   439
 *                     (when a END_FUNCTION, END_FUNCTION_BLOCK, or END_PROGRAM is found)
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   440
 * 
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   441
 *   ignore_pou_state   -> goto(INITIAL)
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   442
 *                         (when a END_FUNCTION, END_FUNCTION_BLOCK, END_PROGRAM or END_CONFIGURATION is found)
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   443
 *   vardecl_list_state -> goto(INITIAL)
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   444
 *                         (when a END_FUNCTION, END_FUNCTION_BLOCK, or END_PROGRAM is found)
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   445
 *   config_state       -> goto(INITIAL)
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   446
 *                         (when a END_CONFIGURATION is found)
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   447
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   448
 *  
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   449
 *   sfc_state     -> push current state(sfc_state); goto(body_state)
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   450
 *                     (when parsing an action. This transition is requested by bison)
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   451
 *   sfc_state     -> push current state(sfc_state); goto(sfc_qualifier_state)
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   452
 *                     (when expecting an action qualifier. This transition is requested by bison)
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   453
 *   sfc_qualifier_state -> pop() to sfc_state
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   454
 *                     (when no longer expecting an action qualifier. This transition is requested by bison)
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   455
 *
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   456
 *   config_state  -> push(config_state); goto(task_init_state)
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   457
 *                     (when parsing a task initialisation. This transition is requested by bison)
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   458
 *   task_init_state -> pop()
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   459
 *                     (when no longer parsing task initialisation parameters. This transition is requested by bison)
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   460
 *
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   461
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   462
 * There is another secondary state machine for parsing comments, another for file_includes, 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   463
 * and yet another for time literals.
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   464
 */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   465
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   466
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   467
/* Bison is in the pre-parsing stage, and we are parsing a POU. Ignore everything up to the end of the POU! */
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   468
%x ignore_pou_state
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   469
%x get_pou_name_state
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
   470
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   471
/* we are parsing a configuration. */
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
   472
%s config_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   473
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   474
/* Inside a configuration, we are parsing a task initialisation parameters */
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   475
/* This means that PRIORITY, SINGLE and INTERVAL must be handled as
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   476
 * tokens, and not as possible identifiers. Note that the above words
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   477
 * are not keywords.
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   478
 */
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   479
%s task_init_state
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   480
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   481
/* we are looking for the first VAR inside a function's, program's or function block's declaration */
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   482
/* This is not exclusive (%x) as we must be able to parse the identifier and data types of a function/FB */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   483
%s header_state
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   484
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   485
/* we are parsing a function, program or function block sequence of VAR..END_VAR delcarations */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   486
%x vardecl_list_state 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   487
/* a substate of the vardecl_list_state: we are inside a specific VAR .. END_VAR */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   488
%s vardecl_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   489
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   490
/* we will be parsing a function body/action/transition. Whether il/st/sfc remains to be determined */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   491
%x body_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   492
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   493
/* we are parsing il code -> flex must return the EOL tokens!       */
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
   494
%s il_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   495
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   496
/* we are parsing st code -> flex must not return the EOL tokens!   */
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
   497
%s st_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   498
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   499
/* we are parsing sfc code -> flex must not return the EOL tokens!  */
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
   500
%s sfc_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   501
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   502
/* we are parsing sfc code, and expecting an action qualifier.      */
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   503
%s sfc_qualifier_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   504
86
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
   505
/* we are parsing sfc code, and expecting the priority token.       */
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
   506
%s sfc_priority_state
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   507
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   508
/* we are parsing a TIME# literal. We must not return any {identifier} tokens. */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   509
%x time_literal_state
75
0e381bdb8888 Fixing handling of task initialisation.
mario
parents: 74
diff changeset
   510
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   511
/* we are parsing a comment. */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   512
%x comment_state
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   513
75
0e381bdb8888 Fixing handling of task initialisation.
mario
parents: 74
diff changeset
   514
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   515
/*******************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   516
/* File #include's */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   517
/*******************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   518
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   519
/* We extend the IEC 61131-3 standard syntax to allow inclusion
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   520
 * of other files, using the IEC 61131-3 pragma directive...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   521
 * The accepted syntax is:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   522
 *  {#include "<filename>"}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   523
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   524
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   525
/* the "include" states are used for picking up the name of an include file */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   526
%x include_beg
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   527
%x include_filename
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   528
%x include_end
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   529
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   530
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   531
file_include_pragma_filename	[^\"]*
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   532
file_include_pragma_beg		"{#include"{st_whitespace}\"
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   533
file_include_pragma_end		\"{st_whitespace}"}"
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   534
file_include_pragma			{file_include_pragma_beg}{file_include_pragma_filename}{file_include_pragma_end}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   535
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   536
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   537
%{
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   538
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   539
/* A counter to track the order by which each token is processed.
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   540
 * NOTE: This counter is not exactly linear (i.e., it does not get incremented by 1 for each token).
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   541
 *       i.e.. it may get incremented by more than one between two consecutive tokens.
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   542
 *       This is due to the fact that the counter gets incremented every 'user action' in flex,
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   543
 *       however not every user action will result in a token being passed to bison.
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   544
 *       Nevertheless this is still OK, as we are only interested in the relative
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   545
 *       ordering of tokens...
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   546
 */
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   547
static long int current_order = 0;
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   548
  
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   549
typedef struct {
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   550
    int eof;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   551
    int lineNumber;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   552
    int currentChar;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   553
    int lineLength;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   554
    int currentTokenStart;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   555
    char *buffer;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   556
    FILE *in_file;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   557
  } tracking_t;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   558
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   559
/* A forward declaration of a function defined at the end of this file. */
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   560
void FreeTracking(tracking_t *tracking);
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   561
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   562
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   563
#define MAX_INCLUDE_DEPTH 16
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
   564
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   565
typedef struct {
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   566
	  YY_BUFFER_STATE buffer_state;
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   567
	  tracking_t *env;
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   568
	  const char *filename;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   569
	} include_stack_t;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   570
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
   571
tracking_t *current_tracking = NULL;
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   572
include_stack_t include_stack[MAX_INCLUDE_DEPTH];
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   573
int include_stack_ptr = 0;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   574
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   575
const char *INCLUDE_DIRECTORIES[] = {
40
873a5b60a7ea Fixed -I library include path behavior + removed old lib implementation + added generated lib func names to stage 1_2 + added Makefile.Linux
etisserant
parents: 15
diff changeset
   576
	DEFAULT_LIBDIR,
873a5b60a7ea Fixed -I library include path behavior + removed old lib implementation + added generated lib func names to stage 1_2 + added Makefile.Linux
etisserant
parents: 15
diff changeset
   577
	".",
873a5b60a7ea Fixed -I library include path behavior + removed old lib implementation + added generated lib func names to stage 1_2 + added Makefile.Linux
etisserant
parents: 15
diff changeset
   578
	"/lib",
873a5b60a7ea Fixed -I library include path behavior + removed old lib implementation + added generated lib func names to stage 1_2 + added Makefile.Linux
etisserant
parents: 15
diff changeset
   579
	"/usr/lib",
873a5b60a7ea Fixed -I library include path behavior + removed old lib implementation + added generated lib func names to stage 1_2 + added Makefile.Linux
etisserant
parents: 15
diff changeset
   580
	"/usr/lib/iec",
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   581
	NULL /* must end with NULL!! */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   582
	};
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   583
%}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   584
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   585
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   586
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   587
/*****************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   588
/* Prelimenary constructs... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   589
/*****************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   590
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   591
/* PRAGMAS */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   592
/* ======= */
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   593
/* In order to allow the declaration of POU prototypes (Function, FB, Program, ...),
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   594
 * especially the prototypes of Functions and FBs defined in the standard
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   595
 * (i.e. standard functions and FBs), we extend the IEC 61131-3 standard syntax 
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   596
 * with two pragmas to indicate that the code is to be parsed (going through the 
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   597
 * lexical, syntactical, and semantic analysers), but no code is to be generated.
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   598
 * 
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   599
 * The accepted syntax is:
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   600
 *  {no_code_generation begin}
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   601
 *    ... prototypes ...
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   602
 *  {no_code_generation end}
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   603
 * 
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   604
 * When parsing these prototypes the abstract syntax tree will be populated as usual,
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   605
 * allowing the semantic analyser to correctly analyse the semantics of calls to these
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   606
 * functions/FBs. However, stage4 will simply ignore all IEC61131-3 code
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   607
 * between the above two pragmas.
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   608
 */
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   609
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   610
disable_code_generation_pragma	"{disable code generation}"
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   611
enable_code_generation_pragma	"{enable code generation}"
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   612
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   613
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   614
/* Any other pragma... */
869
d88f47549408 fix definition of pragma.
mjsousa
parents: 868
diff changeset
   615
pragma ("{"[^}]*"}")|("{{"([^}]|"}"[^}])*"}}")
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   616
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   617
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   618
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   619
/* COMMENTS */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   620
/* ======== */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   621
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   622
/* In order to allow nested comments, comments are handled by a specific comment_state state */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   623
/* Whenever a "(*" is found, we push the current state onto the stack, and enter a new instance of the comment_state state.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   624
 * Whenever a "*)" is found, we pop a state off the stack
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   625
 */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   626
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   627
/* comments... */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   628
comment_beg  "(*"
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   629
comment_end  "*)"
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   630
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   631
/* However, bison has a shift/reduce conflict in bison, when parsing formal function/FB
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   632
 * invocations with the 'NOT <variable_name> =>' syntax (which needs two look ahead 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   633
 * tokens to be parsed correctly - and bison being LALR(1) only supports one).
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   634
 * The current work around requires flex to completely parse the '<variable_name> =>'
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   635
 * sequence. This sequence includes whitespace and/or comments between the 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   636
 * <variable_name> and the "=>" token.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   637
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   638
 * This flex rule (sendto_identifier_token) uses the whitespace/comment as trailing context,
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   639
 * which means we can not use the comment_state method of specifying/finding and ignoring 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   640
 * comments.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   641
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   642
 * For this reason only, we must also define what a complete comment looks like, so
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   643
 * it may be used in this rule. Since the rule uses the whitespace_or_comment
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   644
 * construct as trailing context, this definition of comment must not use any
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   645
 * trailing context either.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   646
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   647
 * Aditionally, it is not possible to define nested comments in flex without the use of
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   648
 * states, so for this particular location, we do NOT support nested comments.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   649
 */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   650
/* NOTE: this seemingly unnecessary complex definition is required
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   651
 *       to be able to eat up comments such as:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   652
 *          '(* Testing... ! ***** ******)'
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   653
 *       without using the trailing context command in flex (/{context})
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   654
 *       since {comment} itself will later be used with
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   655
 *       trailing context ({comment}/{context})
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   656
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   657
not_asterisk				[^*]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   658
not_close_parenthesis_nor_asterisk	[^*)]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   659
asterisk				"*"
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   660
comment_text	({not_asterisk})|(({asterisk}+){not_close_parenthesis_nor_asterisk})
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   661
comment		"(*"({comment_text}*)({asterisk}+)")"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   662
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   663
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   664
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   665
/* 3.1 Whitespace */
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   666
/* ============== */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   667
/*
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   668
 * Whitespace is clearly defined (see IEC 61131-3 v2, section 2.1.4)
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   669
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   670
 * Whitespace definition includes the newline character.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   671
 * 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   672
 * However, the standard is inconsistent in that in IL the newline character 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   673
 * is considered a token (EOL - end of line). 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   674
 * In our implementation we therefore have two definitions of whitespace
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   675
 *   - one for ST, that includes the newline character
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   676
 *   - one for IL without the newline character.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   677
 * Additionally, when parsing IL, the newline character is treated as the EOL token.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   678
 * This requires the use of a state machine in the lexical parser that needs at least 
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   679
 * some knowledge of the syntax itself.
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   680
 *
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   681
 * NOTE: Our definition of whitespace will only work in ASCII!
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   682
 *
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   683
 * NOTE: we cannot use
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   684
 *         st_whitespace	[:space:]*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   685
 *       since we use {st_whitespace} as trailing context. In our case
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   686
 *       this would not constitute "dangerous trailing context", but the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   687
 *       lexical generator (i.e. flex) does not know this (since it does
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   688
 *       not know which characters belong to the set [:space:]), and will
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   689
 *       generate a "dangerous trailing context" warning!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   690
 *       We use this alternative just to stop the flex utility from
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   691
 *       generating the invalid (in this case) warning...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   692
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   693
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   694
st_whitespace			[ \f\n\r\t\v]*
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   695
il_whitespace			[ \f\r\t\v]*
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   696
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   697
st_whitespace_or_pragma_or_commentX	({st_whitespace})|({pragma})|({comment})
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   698
il_whitespace_or_pragma_or_commentX	({il_whitespace})|({pragma})|({comment})
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   699
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   700
st_whitespace_or_pragma_or_comment	{st_whitespace_or_pragma_or_commentX}*
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   701
il_whitespace_or_pragma_or_comment	{il_whitespace_or_pragma_or_commentX}*
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   702
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   703
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   704
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   705
qualified_identifier	{identifier}(\.{identifier})+
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   706
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   707
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   708
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   709
/*****************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   710
/* B.1.1 Letters, digits and identifiers */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   711
/*****************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   712
/* NOTE: The following definitions only work if the host computer
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   713
 *       is using the ASCII maping. For e.g., with EBCDIC [A-Z]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   714
 *       contains non-alphabetic characters!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   715
 *       The correct way of doing it would be to use
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   716
 *       the [:upper:] etc... definitions.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   717
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   718
 *       Unfortunately, further on we need all printable
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   719
 *       characters (i.e. [:print:]), but excluding '$'.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   720
 *       Flex does not allow sets to be composed by excluding
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   721
 *       elements. Sets may only be constructed by adding new
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   722
 *       elements, which means that we have to revert to
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   723
 *       [\x20\x21\x23\x25\x26\x28-x7E] for the definition
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   724
 *       of the printable characters with the required exceptions.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   725
 *       The above also implies the use of ASCII, but now we have
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   726
 *       no way to work around it|
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   727
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   728
 *       The conclusion is that our parser is limited to ASCII
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   729
 *       based host computers!!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   730
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   731
letter		[A-Za-z]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   732
digit		[0-9]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   733
octal_digit	[0-7]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   734
hex_digit	{digit}|[A-F]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   735
identifier	({letter}|(_({letter}|{digit})))((_?({letter}|{digit}))*)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   736
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   737
/*******************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   738
/* B.1.2 Constants */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   739
/*******************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   740
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   741
/******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   742
/* B.1.2.1   Numeric literals */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   743
/******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   744
integer         {digit}((_?{digit})*)
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   745
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   746
/* Some helper symbols for parsing TIME literals... */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   747
integer_0_59    (0(_?))*([0-5](_?))?{digit}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   748
integer_0_19    (0(_?))*([0-1](_?))?{digit}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   749
integer_20_23   (0(_?))*2(_?)[0-3]
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   750
integer_0_23    {integer_0_19}|{integer_20_23}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   751
integer_0_999   {digit}((_?{digit})?)((_?{digit})?)
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   752
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   753
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   754
binary_integer  2#{bit}((_?{bit})*)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   755
bit		[0-1]
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   756
octal_integer   8#{octal_digit}((_?{octal_digit})*)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   757
hex_integer     16#{hex_digit}((_?{hex_digit})*)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   758
exponent        [Ee]([+-]?){integer}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   759
/* The correct definition for real would be:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   760
 * real		{integer}\.{integer}({exponent}?)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   761
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   762
 * Unfortunately, the spec also defines fixed_point (B 1.2.3.1) as:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   763
 * fixed_point		{integer}\.{integer}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   764
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   765
 * This means that {integer}\.{integer} could be interpreted
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   766
 * as either a fixed_point or a real.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   767
 * I have opted to interpret {integer}\.{integer} as a fixed_point.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   768
 * In order to do this, the definition of real has been changed to:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   769
 * real		{integer}\.{integer}{exponent}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   770
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   771
 * This means that the syntax parser now needs to define a real to be
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   772
 * either a real_token or a fixed_point_token!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   773
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   774
real		{integer}\.{integer}{exponent}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   775
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   776
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   777
/*******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   778
/* B.1.2.2   Character Strings */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   779
/*******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   780
/*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   781
common_character_representation :=
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   782
<any printable character except '$', '"' or "'">
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   783
|'$$'
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   784
|'$L'|'$N'|'$P'|'$R'|'$T'
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   785
|'$l'|'$n'|'$p'|'$r'|'$t'
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   786
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   787
NOTE: 	$ = 0x24
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   788
	" = 0x22
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   789
	' = 0x27
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   790
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   791
	printable chars in ASCII: 0x20-0x7E
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   792
*/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   793
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   794
esc_char_u		$L|$N|$P|$R|$T
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   795
esc_char_l		$l|$n|$p|$r|$t
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   796
esc_char		$$|{esc_char_u}|{esc_char_l}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   797
double_byte_char	(${hex_digit}{hex_digit}{hex_digit}{hex_digit})
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   798
single_byte_char	(${hex_digit}{hex_digit})
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   799
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   800
/* WARNING:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   801
 * This definition is only valid in ASCII...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   802
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   803
 * Flex includes the function print_char() that defines
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   804
 * all printable characters portably (i.e. whatever character
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   805
 * encoding is currently being used , ASCII, EBCDIC, etc...)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   806
 * Unfortunately, we cannot generate the definition of
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   807
 * common_character_representation portably, since flex
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   808
 * does not allow definition of sets by subtracting
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   809
 * elements in one set from another set.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   810
 * This means we must build up the defintion of
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   811
 * common_character_representation using only set addition,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   812
 * which leaves us with the only choice of defining the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   813
 * characters non-portably...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   814
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   815
common_character_representation		[\x20\x21\x23\x25\x26\x28-\x7E]|{esc_char}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   816
double_byte_character_representation 	$\"|'|{double_byte_char}|{common_character_representation}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   817
single_byte_character_representation 	$'|\"|{single_byte_char}|{common_character_representation}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   818
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   819
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   820
double_byte_character_string	\"({double_byte_character_representation}*)\"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   821
single_byte_character_string	'({single_byte_character_representation}*)'
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   822
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   823
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   824
/************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   825
/* B 1.2.3.1 - Duration */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   826
/************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   827
fixed_point		{integer}\.{integer}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   828
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   829
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   830
/* NOTE: The IEC 61131-3 v2 standard has an incorrect formal syntax definition of duration,
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   831
 *       as its definition does not match the standard's text.
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   832
 *       IEC 61131-3 v3 (committee draft) seems to have this fixed, so we use that
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   833
 *       definition instead!
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   834
 *
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   835
 *       duration::= ('T' | 'TIME') '#' ['+'|'-'] interval
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   836
 *       interval::= days | hours | minutes | seconds | milliseconds
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   837
 *       fixed_point  ::= integer [ '.' integer]
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   838
 *       days         ::= fixed_point 'd' | integer 'd' ['_'] [ hours ]
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   839
 *       hours        ::= fixed_point 'h' | integer 'h' ['_'] [ minutes ]
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   840
 *       minutes      ::= fixed_point 'm' | integer 'm' ['_'] [ seconds ]
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   841
 *       seconds      ::= fixed_point 's' | integer 's' ['_'] [ milliseconds ]
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   842
 *       milliseconds ::= fixed_point 'ms'
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   843
 * 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   844
 * 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   845
 *  The original IEC 61131-3 v2 definition is:
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   846
 *       duration ::= ('T' | 'TIME') '#' ['-'] interval
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   847
 *       interval ::= days | hours | minutes | seconds | milliseconds
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   848
 *       fixed_point  ::= integer [ '.' integer]
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   849
 *       days         ::= fixed_point 'd' | integer 'd' ['_'] hours
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   850
 *       hours        ::= fixed_point 'h' | integer 'h' ['_'] minutes
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   851
 *       minutes      ::= fixed_point 'm' | integer 'm' ['_'] seconds
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   852
 *       seconds      ::= fixed_point 's' | integer 's' ['_'] milliseconds
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   853
 *       milliseconds ::= fixed_point 'ms'
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   854
 */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   855
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   856
interval_ms_X		({integer_0_999}(\.{integer})?)ms
686
9b87606d4c07 Fix processing of TIME literals (submited by Andreas)
Mario de Sousa <msousa@fe.up.pt>
parents: 627
diff changeset
   857
interval_s_X		{integer_0_59}s(_?{interval_ms_X})?|({integer_0_59}(\.{integer})?s)
9b87606d4c07 Fix processing of TIME literals (submited by Andreas)
Mario de Sousa <msousa@fe.up.pt>
parents: 627
diff changeset
   858
interval_m_X		{integer_0_59}m(_?{interval_s_X})?|({integer_0_59}(\.{integer})?m)
9b87606d4c07 Fix processing of TIME literals (submited by Andreas)
Mario de Sousa <msousa@fe.up.pt>
parents: 627
diff changeset
   859
interval_h_X		{integer_0_23}h(_?{interval_m_X})?|({integer_0_23}(\.{integer})?h)
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   860
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   861
interval_ms		{integer}ms|({fixed_point}ms)
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   862
interval_s		{integer}s(_?{interval_ms_X})?|({fixed_point}s)
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   863
interval_m		{integer}m(_?{interval_s_X})?|({fixed_point}m)
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   864
interval_h		{integer}h(_?{interval_m_X})?|({fixed_point}h)
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   865
interval_d		{integer}d(_?{interval_h_X})?|({fixed_point}d)
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   866
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   867
interval		{interval_ms}|{interval_s}|{interval_m}|{interval_h}|{interval_d}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   868
686
9b87606d4c07 Fix processing of TIME literals (submited by Andreas)
Mario de Sousa <msousa@fe.up.pt>
parents: 627
diff changeset
   869
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   870
/* to help provide nice error messages, we also parse an incorrect but plausible interval... */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   871
/* NOTE that this erroneous interval will be parsed outside the time_literal_state, so must not 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   872
 *      be able to parse any other legal lexcial construct (besides a legal interval, but that
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   873
 *      is OK as this rule will appear _after_ the rule to parse legal intervals!).
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   874
 */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   875
fixed_point_or_integer  {fixed_point}|{integer}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   876
erroneous_interval	({fixed_point_or_integer}d_?)?({fixed_point_or_integer}h_?)?({fixed_point_or_integer}m_?)?({fixed_point_or_integer}s_?)?({fixed_point_or_integer}ms)?
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   877
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   878
/********************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   879
/* B.1.4.1   Directly Represented Variables */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   880
/********************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   881
/* The correct definition, if the standard were to be followed... */
11
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   882
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   883
location_prefix			[IQM]
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   884
size_prefix			[XBWDL]
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   885
direct_variable_standard	%{location_prefix}({size_prefix}?){integer}((.{integer})*)
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   886
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   887
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   888
/* For the MatPLC, we will accept %<identifier>
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   889
 * as a direct variable, this being mapped onto the MatPLC point
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   890
 * named <identifier>
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   891
 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   892
/* TODO: we should not restrict it to only the accepted syntax
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   893
 * of <identifier> as specified by the standard. MatPLC point names
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   894
 * have a more permissive syntax.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   895
 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   896
 * e.g. "P__234"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   897
 *    Is a valid MatPLC point name, but not a valid <identifier> !!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   898
 *    The same happens with names such as "333", "349+23", etc...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   899
 *    How can we handle these more expressive names in our case?
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   900
 *    Remember that some direct variable may remain anonymous, with
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   901
 *    declarations such as:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   902
 *    VAR
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   903
 *       AT %I3 : BYTE := 255;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   904
 *    END_VAR
11
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   905
 *    in which case we are currently using "%I3" as the variable
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   906
 *    name.
8ce37f36d744 Add support for correct syntax of direct variables.
mario
parents: 9
diff changeset
   907
 */
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   908
/* direct_variable_matplc		%{identifier} */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   909
/* direct_variable			{direct_variable_standard}|{direct_variable_matplc} */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
   910
direct_variable			{direct_variable_standard}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   911
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   912
/******************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   913
/* B 1.4.3 - Declaration & Initialisation */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   914
/******************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   915
incompl_location	%[IQM]\*
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   916
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   917
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   918
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   919
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   920
%%
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   921
	/* fprintf(stderr, "flex: state %d\n", YY_START); */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   922
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   923
	/*****************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   924
	/*****************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   925
	/*****************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   926
	/*****                                           *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   927
	/*****                                           *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   928
	/*****   F I R S T    T H I N G S    F I R S T   *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   929
	/*****                                           *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   930
	/*****                                           *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   931
	/*****************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   932
	/*****************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   933
	/*****************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   934
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   935
	/***********************************************************/
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   936
	/* Handle requests sent by bison for flex to change state. */
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   937
	/***********************************************************/
13
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
   938
	if (get_goto_body_state()) {
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   939
	  yy_push_state(body_state);
13
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
   940
	  rst_goto_body_state();
6
94741aa26423 Changing from decl_state directly to sfc_state
mario
parents: 4
diff changeset
   941
	}
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
   942
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   943
	if (get_goto_sfc_qualifier_state()) {
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   944
	  yy_push_state(sfc_qualifier_state);
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   945
	  rst_goto_sfc_qualifier_state();
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   946
	}
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   947
86
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
   948
	if (get_goto_sfc_priority_state()) {
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
   949
	  yy_push_state(sfc_priority_state);
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
   950
	  rst_goto_sfc_priority_state();
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
   951
	}
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
   952
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   953
	if (get_goto_task_init_state()) {
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   954
	  yy_push_state(task_init_state);
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   955
	  rst_goto_task_init_state();
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   956
	}
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
   957
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   958
	if (get_pop_state()) {
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   959
	  yy_pop_state();
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   960
	  rst_pop_state();
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   961
	}
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   962
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   963
	/***************************/
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   964
	/* Handle the pragmas!     */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   965
	/***************************/
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   966
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   967
	/* We start off by searching for the pragmas we handle in the lexical parser. */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   968
<INITIAL>{file_include_pragma}	unput_text(0); yy_push_state(include_beg);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   969
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
   970
	/* Pragmas sent to syntax analyser (bison) */
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   971
	/* NOTE: In the vardecl_list_state we only process the pragmas between two consecutive VAR .. END_VAR blocks.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   972
	 *       We do not process any pragmas trailing after the last END_VAR. We leave that to the body_state.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   973
	 *       This is because the pragmas are stored in a statement_list or instruction_list (in bison),
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   974
	 *       but these lists must start with the special tokens start_IL_body_token/start_ST_body_token.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   975
	 *       This means that these special tokens must be generated (by the body_state) before processing
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   976
	 *       the pragme => we cannot process the trailing pragmas in the vardecl_list_state state.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   977
	 */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   978
{disable_code_generation_pragma}				return disable_code_generation_pragma_token;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   979
{enable_code_generation_pragma}					return enable_code_generation_pragma_token;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   980
<vardecl_list_state>{disable_code_generation_pragma}/(VAR)	return disable_code_generation_pragma_token; 
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   981
<vardecl_list_state>{enable_code_generation_pragma}/(VAR)	return enable_code_generation_pragma_token;  
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   982
<body_state>{disable_code_generation_pragma}			append_bodystate_buffer(yytext); /* in body state we do not process any tokens, we simply store them for later processing! */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   983
<body_state>{enable_code_generation_pragma}			append_bodystate_buffer(yytext); /* in body state we do not process any tokens, we simply store them for later processing! */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   984
	/* Any other pragma we find, we just pass it up to the syntax parser...   */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
   985
	/* Note that the <body_state> state is exclusive, so we have to include it here too. */
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   986
<body_state>{pragma}					append_bodystate_buffer(yytext); /* in body state we do not process any tokens, we simply store them for later processing! */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   987
{pragma}	{/* return the pragmma without the enclosing '{' and '}' */
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
   988
		 int cut = yytext[1]=='{'?2:1;
634
736b36a83548 Added double curly braces for pragma (kept single curly braces for compatibility). Added macro def and undef surrounding pragma to simplify user code. Moved useless comment from generated code back to code generator.
Edouard Tisserant
parents: 627
diff changeset
   989
		 yytext[strlen(yytext)-cut] = '\0';
736b36a83548 Added double curly braces for pragma (kept single curly braces for compatibility). Added macro def and undef surrounding pragma to simplify user code. Moved useless comment from generated code back to code generator.
Edouard Tisserant
parents: 627
diff changeset
   990
		 yylval.ID=strdup(yytext+cut);
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   991
		 return pragma_token;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   992
		}
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
   993
<vardecl_list_state>{pragma}/(VAR) {/* return the pragmma without the enclosing '{' and '}' */
701
562c01f82afb Fix pragma with double bracket token stripping
Laurent Bessard
parents: 637
diff changeset
   994
		 int cut = yytext[1]=='{'?2:1;
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
   995
		 yytext[strlen(yytext)-cut] = '\0';
701
562c01f82afb Fix pragma with double bracket token stripping
Laurent Bessard
parents: 637
diff changeset
   996
		 yylval.ID=strdup(yytext+cut);
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   997
		 return pragma_token;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   998
		}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
   999
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1000
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1001
	/*********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1002
	/* Handle the file includes!     */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1003
	/*********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1004
<include_beg>{file_include_pragma_beg}	BEGIN(include_filename);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1005
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1006
<include_filename>{file_include_pragma_filename}	{
756
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1007
			  /* set the internal state variables of lexical analyser to process a new include file */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1008
			  include_file(yytext);
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1009
			  /* switch to whatever state was active before the include file */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1010
			  yy_pop_state();
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1011
			  /* now process the new file... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1012
			}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1013
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1014
761
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1015
<<EOF>>			{     /* NOTE: Currently bison is incorrectly using END_OF_INPUT in many rules
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1016
			       *       when checking for syntax errors in the input source code.
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1017
			       *       This means that in reality flex will be asked to carry on reading the input
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1018
			       *       even after it has reached the end of all (including the main) input files.
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1019
			       *       In other owrds, we will be called to return more tokens, even after we have
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1020
			       *       already returned an END_OF_INPUT token. In this case, we must carry on returning
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1021
			       *       more END_OF_INPUT tokens.
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1022
			       * 
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1023
			       *       However, in the above case we will be asked to carry on reading more tokens 
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1024
			       *       from the main input file, after we have reached the end. For this to work
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1025
			       *       correctly, we cannot close the main input file!
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1026
			       * 
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1027
			       *       This is why we WILL be called with include_stack_ptr == 0 multiple times,
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1028
			       *       and why we must handle it as a special case
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1029
			       *       that leaves the include_stack_ptr unchanged, and returns END_OF_INPUT once again.
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1030
			       * 
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1031
			       *       As a corollory, flex can never safely close the main input file, and we must ask
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1032
			       *       bison to close it!
76
ec7799ec929b fixing include bug (only ocured for includes in main program file).
mario
parents: 75
diff changeset
  1033
			       */
ec7799ec929b fixing include bug (only ocured for includes in main program file).
mario
parents: 75
diff changeset
  1034
			  if (include_stack_ptr == 0) {
761
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1035
			      // fclose(yyin);           // Must not do this!!
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1036
			      // FreeTracking(current_tracking); // Must not do this!!
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1037
			      /* yyterminate() terminates the scanner and returns a 0 to the 
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1038
			       * scanner's  caller, indicating "all done".
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1039
			       *	
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1040
			       * Our syntax parser (written with bison) has the token	
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1041
			       * END_OF_INPUT associated to the value 0, so even though
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1042
			       * we don't explicitly return the token END_OF_INPUT
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1043
			       * calling yyterminate() is equivalent to doing that. 
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1044
			       */ 	
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1045
			    yyterminate();
737
f6bc5230aadd Fix comments and code alignment
Mario de Sousa <msousa@fe.up.pt>
parents: 686
diff changeset
  1046
			  } else {
761
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  1047
			    fclose(yyin);
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1048
			    FreeTracking(current_tracking);
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
  1049
			    --include_stack_ptr;
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1050
			    yy_delete_buffer(YY_CURRENT_BUFFER);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1051
			    yy_switch_to_buffer((include_stack[include_stack_ptr]).buffer_state);
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
  1052
			    current_tracking = include_stack[include_stack_ptr].env;
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1053
			      /* removing constness of char *. This is safe actually,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1054
			       * since the only real const char * that is stored on the stack is
1
5d893a68be6e Changes made since Mario visit at LOLITECH. Thanks again !
etisserant
parents: 0
diff changeset
  1055
			       * the first one (i.e. the one that gets stored in include_stack[0],
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1056
			       * which is never free'd!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1057
			       */
286
a4f4990d5c66 Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents: 267
diff changeset
  1058
			    /* NOTE: We do __NOT__ free the malloc()'d memory since 
a4f4990d5c66 Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents: 267
diff changeset
  1059
			     *       pointers to this filename will be kept by many objects
a4f4990d5c66 Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents: 267
diff changeset
  1060
			     *       in the abstract syntax tree.
a4f4990d5c66 Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents: 267
diff changeset
  1061
			     *       This will later be used to provide correct error
a4f4990d5c66 Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents: 267
diff changeset
  1062
			     *       messages during semantic analysis (stage 3)
a4f4990d5c66 Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents: 267
diff changeset
  1063
			     */
a4f4990d5c66 Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents: 267
diff changeset
  1064
			    /* free((char *)current_filename); */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1065
			    current_filename = include_stack[include_stack_ptr].filename;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1066
			    yy_push_state(include_end);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1067
			  }
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1068
			}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1069
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1070
<include_end>{file_include_pragma_end}	yy_pop_state();
756
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1071
	/* handle the artificial file includes created by include_string(), which do not end with a '}' */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1072
<include_end>.				unput_text(0); yy_pop_state(); 
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1073
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1074
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1075
	/*********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1076
	/* Handle all the state changes! */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1077
	/*********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1078
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1079
	/* INITIAL -> header_state */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1080
<INITIAL>{
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1081
FUNCTION{st_whitespace} 		if (get_preparse_state()) BEGIN(get_pou_name_state); else {BEGIN(header_state);/* printf("\nChanging to header_state\n"); */} return FUNCTION;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1082
FUNCTION_BLOCK{st_whitespace}		if (get_preparse_state()) BEGIN(get_pou_name_state); else {BEGIN(header_state);/* printf("\nChanging to header_state\n"); */} return FUNCTION_BLOCK;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1083
PROGRAM{st_whitespace}			if (get_preparse_state()) BEGIN(get_pou_name_state); else {BEGIN(header_state);/* printf("\nChanging to header_state\n"); */} return PROGRAM;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1084
CONFIGURATION{st_whitespace}		if (get_preparse_state()) BEGIN(get_pou_name_state); else {BEGIN(config_state);/* printf("\nChanging to config_state\n"); */} return CONFIGURATION;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1085
}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1086
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1087
<get_pou_name_state>{
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1088
{identifier}			BEGIN(ignore_pou_state); yylval.ID=strdup(yytext); return identifier_token;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1089
.				BEGIN(ignore_pou_state); unput_text(0);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1090
}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1091
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1092
<ignore_pou_state>{
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1093
END_FUNCTION			unput_text(0); BEGIN(INITIAL);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1094
END_FUNCTION_BLOCK		unput_text(0); BEGIN(INITIAL);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1095
END_PROGRAM			unput_text(0); BEGIN(INITIAL);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1096
END_CONFIGURATION		unput_text(0); BEGIN(INITIAL);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1097
.|\n				{}/* Ignore text inside POU! (including the '\n' character!)) */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1098
}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1099
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1100
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1101
	/* header_state -> (vardecl_list_state) */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1102
	/* NOTE: This transition assumes that all POUs with code (Function, FB, and Program) will always contain
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1103
	 *       at least one VAR_XXX block.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1104
	 *      How about functions that do not declare variables, and go directly to the body_state???
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1105
	 *      - According to Section 2.5.1.3 (Function Declaration), item 2 in the list, a FUNCTION
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1106
	 *        must have at least one input argument, so a correct declaration will have at least
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1107
	 *        one VAR_INPUT ... VAR_END construct!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1108
	 *      - According to Section 2.5.2.2 (Function Block Declaration), a FUNCTION_BLOCK
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1109
	 *        must have at least one input argument, so a correct declaration will have at least
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1110
	 *        one VAR_INPUT ... VAR_END construct!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1111
	 *      - According to Section 2.5.3 (Programs), a PROGRAM must have at least one input
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1112
	 *        argument, so a correct declaration will have at least one VAR_INPUT ... VAR_END
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1113
	 *        construct!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1114
	 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1115
	 *       All the above means that we needn't worry about PROGRAMs, FUNCTIONs or
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1116
	 *       FUNCTION_BLOCKs that do not have at least one VAR_END before the body_state.
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1117
	 *       If the code has an error, and no VAR_END before the body, we will simply
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1118
	 *       continue in the <vardecl_state> state, until the end of the FUNCTION, FUNCTION_BLOCK
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1119
	 *       or PROGAM.
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1120
	 * 
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1121
	 * WARNING: From 2016-05 (May 2016) onwards, matiec supports a non-standard option in which a Function
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1122
	 *          may be declared with no Input, Output or IN_OUT variables. This means that the above 
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1123
	 *          assumption is no longer valid.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1124
	 *          To make things simpler (i.e. so we do not need to change the transition conditions in the flex state machine),
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1125
	 *          when using this non-standard extension matiec requires that Functions must include at least one 
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1126
	 *          VAR .. END_VAR block. This implies that the above assumption remains valid!
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1127
	 *          This limitation of requiring a VAR .. END_VAR block is not really very limiting, as a function
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1128
	 *          with no input and output parameters will probably need to do some 'work', and for that it will
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1129
	 *          probably need some local variables declared in a VAR .. END_VAR block.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1130
	 *          Note however that in the extreme it might make sense to have a function with no variables whatsoever
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1131
	 *          (e.g.: a function that only calls other functions that all return VOID - another non standard extension!).
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1132
	 *          For now we do not consider this!!
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1133
	 */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1134
<header_state>{
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1135
VAR				| /* execute the next rule's action, i.e. fall-through! */
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1136
VAR_INPUT			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1137
VAR_OUTPUT			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1138
VAR_IN_OUT			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1139
VAR_EXTERNAL			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1140
VAR_GLOBAL			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1141
VAR_TEMP			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1142
VAR_CONFIG			|
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1143
VAR_ACCESS			unput_text(0); /* printf("\nChanging to vardecl_list_state\n") */; BEGIN(vardecl_list_state);
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1144
}
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1145
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1146
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1147
	/* vardecl_list_state -> (vardecl_state | body_state | INITIAL) */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1148
<vardecl_list_state>{
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1149
VAR_INPUT			| /* execute the next rule's action, i.e. fall-through! */
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1150
VAR_OUTPUT			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1151
VAR_IN_OUT			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1152
VAR_EXTERNAL			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1153
VAR_GLOBAL			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1154
VAR_TEMP			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1155
VAR_CONFIG			|
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1156
VAR_ACCESS			|
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1157
VAR				unput_text(0); yy_push_state(vardecl_state);
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1158
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1159
END_FUNCTION			unput_text(0); BEGIN(INITIAL);
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1160
END_FUNCTION_BLOCK		unput_text(0); BEGIN(INITIAL);
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1161
END_PROGRAM			unput_text(0); BEGIN(INITIAL);
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1162
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1163
.				unput_text(0); yy_push_state(body_state); //printf("\nChanging to body_state\n");/* anything else, just change to body_state! */
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1164
}
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1165
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1166
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1167
	/* vardecl_list_state -> pop to $previous_state (vardecl_list_state) */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1168
<vardecl_state>{
948
543f8319bdf8 Fix main state machine in flex (states were being pushed without being poped from the stack)
mjsousa
parents: 934
diff changeset
  1169
END_VAR				yy_pop_state(); return END_VAR; /* pop back to vardecl_list_state */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1170
}
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1171
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1172
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1173
	/* body_state -> (il_state | st_state | sfc_state) */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1174
<body_state>{
1020
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1175
{st_whitespace}			{/* In body state we do not process any tokens,
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1176
				  * we simply store them for later processing!
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1177
				  * NOTE: all whitespace in the begining
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1178
				  * of body_state must be removed so we can
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1179
				  * detect ':=' in the beginning of TRANSACTION
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1180
				  * conditions preceded by whitespace.
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1181
				  * => only add to bodystate_buffer when not in beginning.
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1182
				  */
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1183
				  if (!isempty_bodystate_buffer()) 
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1184
				    append_bodystate_buffer(yytext); 
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1185
				}
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1186
	/* 'INITIAL_STEP' always used in beginning of SFCs !! */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1187
INITIAL_STEP			{ if (isempty_bodystate_buffer())	{unput_text(0); BEGIN(sfc_state);}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1188
				  else					{append_bodystate_buffer(yytext);}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1189
				}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1190
 
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1191
	/* ':=', at the very beginning of a 'body', occurs only in transitions and not Function, FB, or Program bodies! */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1192
:=				{ if (isempty_bodystate_buffer())	{unput_text(0); BEGIN(st_state);} /* We do _not_ return a start_ST_body_token here, as bison does not expect it! */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1193
				  else				 	{append_bodystate_buffer(yytext);}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1194
				}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1195
 
1031
ce026aee03e0 fix compilation of SFC transitions written in IL (compiler was entering endless loop)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1020
diff changeset
  1196
	/* check if ';' occurs before an END_FUNCTION, END_FUNCTION_BLOCK, END_PROGRAM, END_ACTION or END_TRANSITION. (If true => we are parsing ST; If false => parsing IL). */
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1197
END_ACTION			| /* execute the next rule's action, i.e. fall-through! */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1198
END_FUNCTION			|
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1199
END_FUNCTION_BLOCK		|
1031
ce026aee03e0 fix compilation of SFC transitions written in IL (compiler was entering endless loop)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1020
diff changeset
  1200
END_TRANSITION   		|
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1201
END_PROGRAM			{ append_bodystate_buffer(yytext); unput_bodystate_buffer(); BEGIN(il_state); /*printf("returning start_IL_body_token\n");*/ return start_IL_body_token;}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1202
.|\n				{ append_bodystate_buffer(yytext);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1203
				  if (strcmp(yytext, ";") == 0)
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1204
				    {unput_bodystate_buffer(); BEGIN(st_state); /*printf("returning start_ST_body_token\n");*/ return start_ST_body_token;}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1205
				}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1206
	/* The following rules are not really necessary. They just make compilation faster in case the ST Statement List starts with one fot he following... */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1207
RETURN				| /* execute the next rule's action, i.e. fall-through! */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1208
IF				|
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1209
CASE				|
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1210
FOR				|
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1211
WHILE				|
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1212
EXIT				|
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1213
REPEAT				{ if (isempty_bodystate_buffer())	{unput_text(0); BEGIN(st_state); return start_ST_body_token;}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1214
				  else				 	{append_bodystate_buffer(yytext);}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1215
				}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1216
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1217
}	/* end of body_state lexical parser */
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1218
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1219
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1220
	/* (il_state | st_state) -> pop to $previous_state (vardecl_list_state or sfc_state) */
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1221
<il_state,st_state>{
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1222
END_FUNCTION		yy_pop_state(); unput_text(0);
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1223
END_FUNCTION_BLOCK	yy_pop_state(); unput_text(0);
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1224
END_PROGRAM		yy_pop_state(); unput_text(0);
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1225
END_TRANSITION		yy_pop_state(); unput_text(0);
6
94741aa26423 Changing from decl_state directly to sfc_state
mario
parents: 4
diff changeset
  1226
END_ACTION		yy_pop_state(); unput_text(0);
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1227
}
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1228
868
23f271534a7c Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents: 867
diff changeset
  1229
	/* sfc_state -> pop to $previous_state (vardecl_list_state or sfc_state) */
4
0d71456312ab stack overflow problem corrected
lbessard
parents: 3
diff changeset
  1230
<sfc_state>{
0d71456312ab stack overflow problem corrected
lbessard
parents: 3
diff changeset
  1231
END_FUNCTION		yy_pop_state(); unput_text(0);
0d71456312ab stack overflow problem corrected
lbessard
parents: 3
diff changeset
  1232
END_FUNCTION_BLOCK	yy_pop_state(); unput_text(0);
0d71456312ab stack overflow problem corrected
lbessard
parents: 3
diff changeset
  1233
END_PROGRAM		yy_pop_state(); unput_text(0);
0d71456312ab stack overflow problem corrected
lbessard
parents: 3
diff changeset
  1234
}
0d71456312ab stack overflow problem corrected
lbessard
parents: 3
diff changeset
  1235
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1236
	/* config -> INITIAL */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1237
END_CONFIGURATION	BEGIN(INITIAL); return END_CONFIGURATION;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1238
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1239
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1240
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1241
	/***************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1242
	/* Next is to to remove all whitespace */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1243
	/***************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1244
	/* NOTE: pragmas are handled right at the beginning... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1245
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1246
	/* The whitespace */
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1247
<INITIAL,header_state,config_state,vardecl_list_state,vardecl_state,st_state,sfc_state,task_init_state,sfc_qualifier_state>{st_whitespace}	/* Eat any whitespace */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1248
<il_state>{il_whitespace}		/* Eat any whitespace */
1020
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1249
 /* NOTE: Due to the need of having the following rule have higher priority,
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1250
  *        the following rule was moved to an earlier position in this file.
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1251
<body_state>{st_whitespace}		{...}
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  1252
 */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1253
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1254
	/* The comments */
952
e984cfdf3b10 Add a pre-parsing phase to stage1_2 (allows source code that references POUs and datatypes before they are declared)
mjsousa
parents: 948
diff changeset
  1255
<get_pou_name_state,ignore_pou_state,body_state,vardecl_list_state>{comment_beg}		yy_push_state(comment_state);
867
a435684a5223 Add option to control support for nested comments (default is off, as defined in IEC 61131-3 v2)
mjsousa
parents: 866
diff changeset
  1256
{comment_beg}						yy_push_state(comment_state);
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1257
<comment_state>{
867
a435684a5223 Add option to control support for nested comments (default is off, as defined in IEC 61131-3 v2)
mjsousa
parents: 866
diff changeset
  1258
{comment_beg}						{if (get_opt_nested_comments()) yy_push_state(comment_state);}
a435684a5223 Add option to control support for nested comments (default is off, as defined in IEC 61131-3 v2)
mjsousa
parents: 866
diff changeset
  1259
{comment_end}						yy_pop_state();
a435684a5223 Add option to control support for nested comments (default is off, as defined in IEC 61131-3 v2)
mjsousa
parents: 866
diff changeset
  1260
.							/* Ignore text inside comment! */
a435684a5223 Add option to control support for nested comments (default is off, as defined in IEC 61131-3 v2)
mjsousa
parents: 866
diff changeset
  1261
\n							/* Ignore text inside comment! */
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1262
}
267
0a1204bcc9af starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents: 264
diff changeset
  1263
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1264
	/*****************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1265
	/* B.1.1 Letters, digits and identifiers */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1266
	/*****************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1267
	/* NOTE: 'R1', 'IN', etc... are IL operators, and therefore tokens
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1268
	 *       On the other hand, the spec does not define them as keywords,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1269
	 *       which means they may be re-used for variable names, etc...!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1270
	 *       The syntax parser already caters for the possibility of these
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1271
	 *       tokens being used for variable names in their declarations.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1272
	 *       When they are declared, they will be added to the variable symbol table!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1273
	 *       Further appearances of these tokens must no longer be parsed
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1274
	 *       as R1_tokens etc..., but rather as variable_name_tokens!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1275
	 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1276
	 *       That is why the first thing we do with identifiers, even before
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1277
	 *       checking whether they may be a 'keyword', is to check whether
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1278
	 *       they have been previously declared as a variable name,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1279
	 *
13
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1280
	 *       However, we have a dilema! Should we here also check for
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1281
	 *       prev_declared_derived_function_name_token?
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1282
	 *       If we do, then the 'MOD' default library function (defined in
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1283
	 *       the standard) will always be returned as a function name, and
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1284
	 *       it will therefore not be possible to use it as an operator as 
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1285
	 *       in the following ST expression 'X := Y MOD Z;' !
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1286
	 *       If we don't, then even it will not be possible to use 'MOD'
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1287
	 *       as a funtion as in 'X := MOD(Y, Z);'
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1288
	 *       We solve this by NOT testing for function names here, and
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1289
	 *       handling this function and keyword clash in bison!
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1290
	 */
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1291
	/* NOTE: The following code has been commented out as most users do not want matiec
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1292
	 *       to allow the use of 'R1', 'IN' ... IL operators as identifiers, 
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1293
	 *       even though a literal reading of the standard allows this.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1294
	 *       We could add this as a commadnd line option, but it is not yet done.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1295
	 *       For now we just comment out the code, but leave it the commented code
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1296
	 *       in so we can re-activate quickly (without having to go through old commits
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1297
	 *       in the mercurial repository to figure out the missing code!
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1298
	 */
83
aeb7e0e53855 commenting out code no longer required. To be deleted later.
mario
parents: 82
diff changeset
  1299
 /*
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1300
{identifier} 	{int token = get_identifier_token(yytext);
81
de518eb7bc74 removing debug messages left by mistake in previous commit.
mario
parents: 80
diff changeset
  1301
		 // fprintf(stderr, "flex: analysing identifier '%s'...", yytext); 
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1302
		 if ((token == prev_declared_variable_name_token) ||
13
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1303
//		     (token == prev_declared_derived_function_name_token) || // DO NOT add this condition!
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1304
		     (token == prev_declared_fb_name_token)) {
83
aeb7e0e53855 commenting out code no longer required. To be deleted later.
mario
parents: 82
diff changeset
  1305
		 // if (token != identifier_token)
aeb7e0e53855 commenting out code no longer required. To be deleted later.
mario
parents: 82
diff changeset
  1306
		 // * NOTE: if we replace the above uncommented conditions with
13
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1307
                  *       the simple test of (token != identifier_token), then 
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1308
                  *       'MOD' et al must be removed from the 
77174ccc5471 Many major changes to support SFC!
mario
parents: 11
diff changeset
  1309
                  *       library_symbol_table as a default function name!
83
aeb7e0e53855 commenting out code no longer required. To be deleted later.
mario
parents: 82
diff changeset
  1310
		  * //
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1311
		   yylval.ID=strdup(yytext);
81
de518eb7bc74 removing debug messages left by mistake in previous commit.
mario
parents: 80
diff changeset
  1312
		   // fprintf(stderr, "returning token %d\n", token); 
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1313
		   return token;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1314
		 }
83
aeb7e0e53855 commenting out code no longer required. To be deleted later.
mario
parents: 82
diff changeset
  1315
		 // otherwise, leave it for the other lexical parser rules... 
81
de518eb7bc74 removing debug messages left by mistake in previous commit.
mario
parents: 80
diff changeset
  1316
		 // fprintf(stderr, "rejecting\n"); 
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1317
		 REJECT;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1318
		}
83
aeb7e0e53855 commenting out code no longer required. To be deleted later.
mario
parents: 82
diff changeset
  1319
 */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1320
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1321
	/******************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1322
	/******************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1323
	/******************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1324
	/*****                                            *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1325
	/*****                                            *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1326
	/*****   N O W    D O   T H E   K E Y W O R D S   *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1327
	/*****                                            *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1328
	/*****                                            *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1329
	/******************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1330
	/******************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1331
	/******************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1332
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1333
934
2a42a68f4b59 Turn support of derefencing operator '^' an option (default is not supported).
mjsousa
parents: 933
diff changeset
  1334
REF	{if (get_opt_ref_standard_extensions()) return REF;        else{REJECT;}}		/* Keyword in IEC 61131-3 v3 */
2a42a68f4b59 Turn support of derefencing operator '^' an option (default is not supported).
mjsousa
parents: 933
diff changeset
  1335
DREF	{if (get_opt_ref_standard_extensions()) return DREF;       else{REJECT;}}		/* Keyword in IEC 61131-3 v3 */
2a42a68f4b59 Turn support of derefencing operator '^' an option (default is not supported).
mjsousa
parents: 933
diff changeset
  1336
REF_TO	{if (get_opt_ref_standard_extensions()) return REF_TO;     else{REJECT;}}		/* Keyword in IEC 61131-3 v3 */
2a42a68f4b59 Turn support of derefencing operator '^' an option (default is not supported).
mjsousa
parents: 933
diff changeset
  1337
NULL	{if (get_opt_ref_standard_extensions()) return NULL_token; else{REJECT;}}		/* Keyword in IEC 61131-3 v3 */
873
dea39ef02847 Add limited support for the REF() operator (defined in v3 of IEC 61131-3)
mjsousa
parents: 869
diff changeset
  1338
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1339
EN	return EN;			/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1340
ENO	return ENO;			/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1341
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1342
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1343
	/******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1344
	/* B 1.2.1 - Numeric Literals */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1345
	/******************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1346
TRUE		return TRUE;		/* Keyword */
257
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1347
BOOL#1  	return boolean_true_literal_token;
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1348
BOOL#TRUE	return boolean_true_literal_token;
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1349
SAFEBOOL#1	{if (get_opt_safe_extensions()) {return safeboolean_true_literal_token;} else{REJECT;}} /* Keyword (Data Type) */ 
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1350
SAFEBOOL#TRUE	{if (get_opt_safe_extensions()) {return safeboolean_true_literal_token;} else{REJECT;}} /* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1351
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1352
FALSE		return FALSE;		/* Keyword */
257
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1353
BOOL#0  	return boolean_false_literal_token;
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1354
BOOL#FALSE  	return boolean_false_literal_token;
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1355
SAFEBOOL#0	{if (get_opt_safe_extensions()) {return safeboolean_false_literal_token;} else{REJECT;}} /* Keyword (Data Type) */ 
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1356
SAFEBOOL#FALSE	{if (get_opt_safe_extensions()) {return safeboolean_false_literal_token;} else{REJECT;}} /* Keyword (Data Type) */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1357
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1358
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1359
	/************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1360
	/* B 1.2.3.1 - Duration */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1361
	/************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1362
t#		return T_SHARP;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1363
T#		return T_SHARP;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1364
TIME		return TIME;		/* Keyword (Data Type) */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1365
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1366
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1367
	/************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1368
	/* B 1.2.3.2 - Time of day and Date */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1369
	/************************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1370
TIME_OF_DAY	return TIME_OF_DAY;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1371
TOD		return TIME_OF_DAY;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1372
DATE		return DATE;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1373
d#		return D_SHARP;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1374
D#		return D_SHARP;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1375
DATE_AND_TIME	return DATE_AND_TIME;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1376
DT		return DATE_AND_TIME;	/* Keyword (Data Type) */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1377
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1378
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1379
	/***********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1380
	/* B 1.3.1 - Elementary Data Types */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1381
	/***********************************/
257
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1382
BOOL		return BOOL;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1383
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1384
BYTE		return BYTE;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1385
WORD		return WORD;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1386
DWORD		return DWORD;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1387
LWORD		return LWORD;		/* Keyword (Data Type) */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1388
257
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1389
SINT		return SINT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1390
INT		return INT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1391
DINT		return DINT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1392
LINT		return LINT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1393
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1394
USINT		return USINT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1395
UINT		return UINT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1396
UDINT		return UDINT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1397
ULINT		return ULINT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1398
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1399
REAL		return REAL;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1400
LREAL		return LREAL;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1401
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1402
WSTRING		return WSTRING;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1403
STRING		return STRING;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1404
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1405
TIME		return TIME;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1406
DATE		return DATE;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1407
DT		return DT;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1408
TOD		return TOD;		/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1409
DATE_AND_TIME	return DATE_AND_TIME;	/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1410
TIME_OF_DAY	return TIME_OF_DAY;	/* Keyword (Data Type) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1411
1014
a61f8f58f612 Add support for non-standard VOID datatype. May ony be used to define functions returning VOID.
mjsousa
parents: 1013
diff changeset
  1412
					/* A non-standard extension! */
a61f8f58f612 Add support for non-standard VOID datatype. May ony be used to define functions returning VOID.
mjsousa
parents: 1013
diff changeset
  1413
VOID		{if (runtime_options.allow_void_datatype) {return VOID;}          else {REJECT;}} 
a61f8f58f612 Add support for non-standard VOID datatype. May ony be used to define functions returning VOID.
mjsousa
parents: 1013
diff changeset
  1414
a61f8f58f612 Add support for non-standard VOID datatype. May ony be used to define functions returning VOID.
mjsousa
parents: 1013
diff changeset
  1415
257
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1416
	/*****************************************************************/
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1417
	/* Keywords defined in "Safety Software Technical Specification" */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1418
	/*****************************************************************/
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1419
        /* 
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1420
         * NOTE: The following keywords are define in 
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1421
         *       "Safety Software Technical Specification,
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1422
         *        Part 1: Concepts and Function Blocks,  
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1423
         *        Version 1.0 – Official Release"
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1424
         *        written by PLCopen - Technical Committee 5
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1425
         *
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1426
         *        We only support these extensions and keywords
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1427
         *        if the apropriate command line option is given.
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1428
         */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1429
SAFEBOOL	     {if (get_opt_safe_extensions()) {return SAFEBOOL;}          else {REJECT;}} 
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1430
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1431
SAFEBYTE	     {if (get_opt_safe_extensions()) {return SAFEBYTE;}          else {REJECT;}} 
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1432
SAFEWORD	     {if (get_opt_safe_extensions()) {return SAFEWORD;}          else {REJECT;}} 
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1433
SAFEDWORD	     {if (get_opt_safe_extensions()) {return SAFEDWORD;}         else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1434
SAFELWORD	     {if (get_opt_safe_extensions()) {return SAFELWORD;}         else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1435
               
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1436
SAFEREAL	     {if (get_opt_safe_extensions()) {return SAFESINT;}          else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1437
SAFELREAL    	     {if (get_opt_safe_extensions()) {return SAFELREAL;}         else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1438
                  
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1439
SAFESINT	     {if (get_opt_safe_extensions()) {return SAFESINT;}          else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1440
SAFEINT	             {if (get_opt_safe_extensions()) {return SAFEINT;}           else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1441
SAFEDINT	     {if (get_opt_safe_extensions()) {return SAFEDINT;}          else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1442
SAFELINT             {if (get_opt_safe_extensions()) {return SAFELINT;}          else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1443
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1444
SAFEUSINT            {if (get_opt_safe_extensions()) {return SAFEUSINT;}         else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1445
SAFEUINT             {if (get_opt_safe_extensions()) {return SAFEUINT;}          else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1446
SAFEUDINT            {if (get_opt_safe_extensions()) {return SAFEUDINT;}         else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1447
SAFEULINT            {if (get_opt_safe_extensions()) {return SAFEULINT;}         else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1448
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1449
 /* SAFESTRING and SAFEWSTRING are not yet supported, i.e. checked correctly, in the semantic analyser (stage 3) */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1450
 /*  so it is best not to support them at all... */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1451
 /*
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1452
SAFEWSTRING          {if (get_opt_safe_extensions()) {return SAFEWSTRING;}       else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1453
SAFESTRING           {if (get_opt_safe_extensions()) {return SAFESTRING;}        else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1454
 */
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1455
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1456
SAFETIME             {if (get_opt_safe_extensions()) {return SAFETIME;}          else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1457
SAFEDATE             {if (get_opt_safe_extensions()) {return SAFEDATE;}          else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1458
SAFEDT               {if (get_opt_safe_extensions()) {return SAFEDT;}            else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1459
SAFETOD              {if (get_opt_safe_extensions()) {return SAFETOD;}           else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1460
SAFEDATE_AND_TIME    {if (get_opt_safe_extensions()) {return SAFEDATE_AND_TIME;} else{REJECT;}}
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1461
SAFETIME_OF_DAY      {if (get_opt_safe_extensions()) {return SAFETIME_OF_DAY;}   else{REJECT;}}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1462
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1463
	/********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1464
	/* B 1.3.2 - Generic data types */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1465
	/********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1466
	/* Strangely, the following symbols do not seem to be required! */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1467
	/* But we include them so they become reserved words, and do not
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1468
	 * get passed up to bison as an identifier...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1469
	 */
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1470
ANY		return ANY;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1471
ANY_DERIVED	return ANY_DERIVED;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1472
ANY_ELEMENTARY	return ANY_ELEMENTARY;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1473
ANY_MAGNITUDE	return ANY_MAGNITUDE;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1474
ANY_NUM		return ANY_NUM;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1475
ANY_REAL	return ANY_REAL;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1476
ANY_INT		return ANY_INT;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1477
ANY_BIT		return ANY_BIT;		/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1478
ANY_STRING	return ANY_STRING;	/* Keyword (Data Type) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1479
ANY_DATE	return ANY_DATE;	/* Keyword (Data Type) */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1480
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1481
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1482
	/********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1483
	/* B 1.3.3 - Derived data types */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1484
	/********************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1485
":="		return ASSIGN;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1486
".."		return DOTDOT;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1487
TYPE		return TYPE;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1488
END_TYPE	return END_TYPE;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1489
ARRAY		return ARRAY;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1490
OF		return OF;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1491
STRUCT		return STRUCT;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1492
END_STRUCT	return END_STRUCT;	/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1493
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1494
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1495
	/*********************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1496
	/* B 1.4 - Variables */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1497
	/*********************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1498
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1499
	/******************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1500
	/* B 1.4.3 - Declaration & Initialisation */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1501
	/******************************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1502
VAR_INPUT	return VAR_INPUT;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1503
VAR_OUTPUT	return VAR_OUTPUT;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1504
VAR_IN_OUT	return VAR_IN_OUT;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1505
VAR_EXTERNAL	return VAR_EXTERNAL;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1506
VAR_GLOBAL	return VAR_GLOBAL;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1507
END_VAR		return END_VAR;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1508
RETAIN		return RETAIN;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1509
NON_RETAIN	return NON_RETAIN;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1510
R_EDGE		return R_EDGE;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1511
F_EDGE		return F_EDGE;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1512
AT		return AT;		/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1513
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1514
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1515
	/***********************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1516
	/* B 1.5.1 - Functions */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1517
	/***********************/
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1518
	/* Note: The following END_FUNCTION rule includes a BEGIN(INITIAL); command.
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1519
	 *       This is necessary in case the input program being parsed has syntax errors that force
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1520
	 *       flex's main state machine to never change to the il_state or the st_state
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1521
	 *       after changing to the body_state.
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1522
	 *       Ths BEGIN(INITIAL) command forces the flex state machine to re-synchronise with 
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1523
	 *       the input stream even in the presence of buggy code!
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1524
	 */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1525
FUNCTION			return FUNCTION;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1526
END_FUNCTION	BEGIN(INITIAL);	return END_FUNCTION;			/* Keyword */  /* see Note above */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1527
VAR				return VAR;				/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1528
CONSTANT			return CONSTANT;			/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1529
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1530
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1531
	/*****************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1532
	/* B 1.5.2 - Function Blocks */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1533
	/*****************************/
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1534
	/* Note: The following END_FUNCTION_BLOCK rule includes a BEGIN(INITIAL); command.
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1535
	 *       This is necessary in case the input program being parsed has syntax errors that force
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1536
	 *       flex's main state machine to never change to the il_state or the st_state
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1537
	 *       after changing to the body_state.
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1538
	 *       Ths BEGIN(INITIAL) command forces the flex state machine to re-synchronise with 
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1539
	 *       the input stream even in the presence of buggy code!
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1540
	 */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1541
FUNCTION_BLOCK				return FUNCTION_BLOCK;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1542
END_FUNCTION_BLOCK	BEGIN(INITIAL);	return END_FUNCTION_BLOCK;	/* Keyword */  /* see Note above */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1543
VAR_TEMP				return VAR_TEMP;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1544
VAR					return VAR;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1545
NON_RETAIN				return NON_RETAIN;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1546
END_VAR					return END_VAR;			/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1547
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1548
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1549
	/**********************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1550
	/* B 1.5.3 - Programs */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1551
	/**********************/
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1552
	/* Note: The following END_PROGRAM rule includes a BEGIN(INITIAL); command.
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  1553
	 *       This is necessary in case the input program being parsed has syntax errors that force
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1554
	 *       flex's main state machine to never change to the il_state or the st_state
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1555
	 *       after changing to the body_state.
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1556
	 *       Ths BEGIN(INITIAL) command forces the flex state machine to re-synchronise with 
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1557
	 *       the input stream even in the presence of buggy code!
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1558
	 */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1559
PROGRAM				return PROGRAM;				/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1560
END_PROGRAM	BEGIN(INITIAL);	return END_PROGRAM;			/* Keyword */  /* see Note above */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1561
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1562
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1563
	/********************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1564
	/* B 1.6 Sequential Function Chart elements */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1565
	/********************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1566
	/* NOTE: the following identifiers/tokens clash with the R and S IL operators, as well
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1567
	.* as other identifiers that may be used as variable names inside IL and ST programs.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1568
	 * They will have to be handled when we include parsing of SFC... For now, simply
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1569
	 * ignore them!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1570
	 */
1
5d893a68be6e Changes made since Mario visit at LOLITECH. Thanks again !
etisserant
parents: 0
diff changeset
  1571
	 
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1572
ACTION		return ACTION;			/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1573
END_ACTION	return END_ACTION;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1574
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1575
TRANSITION	return TRANSITION;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1576
END_TRANSITION	return END_TRANSITION;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1577
FROM		return FROM;			/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1578
TO		return TO;			/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1579
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1580
INITIAL_STEP	return INITIAL_STEP;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1581
STEP		return STEP;			/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1582
END_STEP	return END_STEP;		/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1583
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1584
	/* PRIORITY is not a keyword, so we only return it when 
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1585
	 * it is explicitly required and we are not expecting any identifiers
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1586
	 * that could also use the same letter sequence (i.e. an identifier: piority)
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1587
	 */
86
1988bf1634da Adding support for use of PRIORITY as identifier inside SFC.
mario
parents: 84
diff changeset
  1588
<sfc_priority_state>PRIORITY	return PRIORITY;
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1589
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1590
<sfc_qualifier_state>{
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1591
L		return L;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1592
D		return D;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1593
SD		return SD;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1594
DS		return DS;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1595
SL		return SL;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1596
N		return N;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1597
P		return P;
627
e7caa7d32ef5 Adding support for P0 and P1 qualifiers and fixing code generated for SL qualifier
Laurent Bessard
parents: 616
diff changeset
  1598
P0		return P0;
e7caa7d32ef5 Adding support for P0 and P1 qualifiers and fixing code generated for SL qualifier
Laurent Bessard
parents: 616
diff changeset
  1599
P1		return P1;
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1600
R		return R;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1601
S		return S;
1
5d893a68be6e Changes made since Mario visit at LOLITECH. Thanks again !
etisserant
parents: 0
diff changeset
  1602
}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1603
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1604
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1605
	/********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1606
	/* B 1.7 Configuration elements */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1607
	/********************************/
1010
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1608
	/* Note: The following END_CONFIGURATION rule will never get to be used, as we have
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1609
	 *       another identical rule above (closer to the rules handling the transitions
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1610
	 *       of the main state machine) that will always execute before this one.
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1611
	 * Note: The following END_CONFIGURATION rule includes a BEGIN(INITIAL); command.
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1612
	 *       This is nt strictly necessary, but I place it here so it follwos the same
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1613
	 *       pattern used in END_FUNCTION, END_PROGRAM, and END_FUNCTION_BLOCK
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1614
	 */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1615
CONFIGURATION				return CONFIGURATION;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1616
END_CONFIGURATION	BEGIN(INITIAL); return END_CONFIGURATION;	/* Keyword */   /* see 2 Notes above! */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1617
TASK					return TASK;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1618
RESOURCE				return RESOURCE;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1619
ON					return ON;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1620
END_RESOURCE				return END_RESOURCE;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1621
VAR_CONFIG				return VAR_CONFIG;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1622
VAR_ACCESS				return VAR_ACCESS;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1623
END_VAR					return END_VAR;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1624
WITH					return WITH;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1625
PROGRAM					return PROGRAM;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1626
RETAIN					return RETAIN;			/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1627
NON_RETAIN				return NON_RETAIN;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1628
READ_WRITE				return READ_WRITE;		/* Keyword */
242907849850 Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
mjsousa
parents: 952
diff changeset
  1629
READ_ONLY				return READ_ONLY;		/* Keyword */
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1630
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1631
	/* PRIORITY, SINGLE and INTERVAL are not a keywords, so we only return them when 
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1632
	 * it is explicitly required and we are not expecting any identifiers
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1633
	 * that could also use the same letter sequence (i.e. an identifier: piority, ...)
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1634
	 */
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1635
<task_init_state>{
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1636
PRIORITY		return PRIORITY;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1637
SINGLE			return SINGLE;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1638
INTERVAL		return INTERVAL;
74
85af9521bf63 fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents: 73
diff changeset
  1639
}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1640
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1641
	/***********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1642
	/* B 2.1 Instructions and Operands */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1643
	/***********************************/
3
38850ee685e6 ST and IL parsing added into flex-bison analyser
lbessard
parents: 1
diff changeset
  1644
<il_state>\n		return EOL;
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1645
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1646
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1647
	/*******************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1648
	/* B 2.2 Operators */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1649
	/*******************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1650
	/* NOTE: we can't have flex return the same token for
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1651
	 *       ANDN and &N, neither for AND and &, since
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1652
	 *       AND and ANDN are considered valid variable
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1653
	 *       function or functionblock type names!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1654
	 *       This means that the parser may decide that the
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1655
	 *       AND or ANDN strings found in the source code
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1656
	 *       are being used as variable names
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1657
	 *       and not as operators, and will therefore transform
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1658
	 *       these tokens into indentifier tokens!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1659
	 *       We can't have the parser thinking that the source
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1660
	 *       code contained the string AND (which may be interpreted
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1661
	 *       as a vairable name) when in reality the source code
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1662
	 *       merely contained the character &, so we use two
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1663
	 *       different tokens for & and AND (and similarly
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1664
	 *       ANDN and &N)!
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1665
	 */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1666
 /* The following tokens clash with ST expression operators and Standard Functions */
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1667
 /* They are also keywords! */
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1668
AND		return AND;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1669
MOD		return MOD;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1670
OR		return OR;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1671
XOR		return XOR;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1672
NOT		return NOT;		/* Keyword */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1673
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1674
 /* The following tokens clash with Standard Functions */
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1675
 /* They are keywords because they are a function name */
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1676
<il_state>{
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1677
ADD		return ADD;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1678
DIV		return DIV;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1679
EQ		return EQ;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1680
GE		return GE;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1681
GT		return GT;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1682
LE		return LE;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1683
LT		return LT;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1684
MUL		return MUL;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1685
NE		return NE;		/* Keyword (Standard Function) */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1686
SUB		return SUB;		/* Keyword (Standard Function) */
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1687
}
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1688
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1689
 /* The following tokens clash with SFC action qualifiers */
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1690
 /* They are not keywords! */
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1691
<il_state>{
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1692
S		return S;
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1693
R		return R;
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1694
}
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1695
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1696
 /* The following tokens clash with ST expression operators */
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1697
&		return AND2;		/* NOT a Delimiter! */
68
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1698
b0a43002dcac Adding basic error checking.
mario
parents: 58
diff changeset
  1699
 /* The following tokens have no clashes */
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1700
 /* They are not keywords! */
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1701
<il_state>{
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1702
LD		return LD;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1703
LDN		return LDN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1704
ST		return ST;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1705
STN		return STN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1706
S1		return S1;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1707
R1		return R1;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1708
CLK		return CLK;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1709
CU		return CU;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1710
CD		return CD;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1711
PV		return PV;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1712
IN		return IN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1713
PT		return PT;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1714
ANDN		return ANDN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1715
&N		return ANDN2;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1716
ORN		return ORN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1717
XORN		return XORN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1718
CAL		return CAL;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1719
CALC		return CALC;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1720
CALCN		return CALCN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1721
RET		return RET;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1722
RETC		return RETC;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1723
RETCN		return RETCN;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1724
JMP		return JMP;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1725
JMPC		return JMPC;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1726
JMPCN		return JMPCN;
73
0e623bbdee95 fixing infinite error loops at library level, and ...
mario
parents: 72
diff changeset
  1727
}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1728
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1729
	/***********************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1730
	/* B 3.1 - Expressions */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1731
	/***********************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1732
"**"		return OPER_EXP;	/* NOT a Delimiter! */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1733
"<>"		return OPER_NE;		/* NOT a Delimiter! */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1734
">="		return OPER_GE;		/* NOT a Delimiter! */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1735
"<="		return OPER_LE;		/* NOT a Delimiter! */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1736
&		return AND2;		/* NOT a Delimiter! */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1737
AND		return AND;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1738
XOR		return XOR;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1739
OR		return OR;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1740
NOT		return NOT;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1741
MOD		return MOD;		/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1742
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1743
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1744
	/*****************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1745
	/* B 3.2.2 Subprogram Control Statements */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1746
	/*****************************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1747
:=		return ASSIGN;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1748
=>		return SENDTO;		/* Delimiter */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1749
RETURN		return RETURN;		/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1750
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1751
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1752
	/********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1753
	/* B 3.2.3 Selection Statements */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1754
	/********************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1755
IF		return IF;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1756
THEN		return THEN;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1757
ELSIF		return ELSIF;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1758
ELSE		return ELSE;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1759
END_IF		return END_IF;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1760
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1761
CASE		return CASE;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1762
OF		return OF;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1763
ELSE		return ELSE;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1764
END_CASE	return END_CASE;	/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1765
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1766
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1767
	/********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1768
	/* B 3.2.4 Iteration Statements */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1769
	/********************************/
82
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1770
FOR		return FOR;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1771
TO		return TO;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1772
BY		return BY;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1773
DO		return DO;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1774
END_FOR		return END_FOR;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1775
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1776
WHILE		return WHILE;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1777
DO		return DO;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1778
END_WHILE	return END_WHILE;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1779
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1780
REPEAT		return REPEAT;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1781
UNTIL		return UNTIL;		/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1782
END_REPEAT	return END_REPEAT;	/* Keyword */
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1783
2b6e9eeeff2c Adding some comments.
mario
parents: 81
diff changeset
  1784
EXIT		return EXIT;		/* Keyword */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1785
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1786
257
90782e241346 Huge change.
Mario de Sousa <msousa@fe.up.pt>
parents: 177
diff changeset
  1787
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1788
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1789
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1790
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1791
	/********************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1792
	/********************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1793
	/********************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1794
	/*****                                              *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1795
	/*****                                              *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1796
	/*****  N O W    W O R K    W I T H    V A L U E S  *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1797
	/*****                                              *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1798
	/*****                                              *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1799
	/********************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1800
	/********************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1801
	/********************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1802
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1803
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1804
	/********************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1805
	/* B.1.4.1   Directly Represented Variables */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1806
	/********************************************/
175
dadda1b5401e Adding support for checking direct variable declared before using
lbessard
parents: 152
diff changeset
  1807
{direct_variable}   {yylval.ID=strdup(yytext); return get_direct_variable_token(yytext);}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1808
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1809
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1810
	/******************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1811
	/* B 1.4.3 - Declaration & Initialisation */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1812
	/******************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1813
{incompl_location}	{yylval.ID=strdup(yytext); return incompl_location_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1814
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1815
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1816
	/************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1817
	/* B 1.2.3.1 - Duration */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1818
	/************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1819
{fixed_point}		{yylval.ID=strdup(yytext); return fixed_point_token;}
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1820
{interval}		{/*fprintf(stderr, "entering time_literal_state ##%s##\n", yytext);*/ unput_and_mark('#'); yy_push_state(time_literal_state);}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1821
{erroneous_interval}	{return erroneous_interval_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1822
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1823
<time_literal_state>{
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1824
{integer}d		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return integer_d_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1825
{integer}h		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return integer_h_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1826
{integer}m		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return integer_m_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1827
{integer}s		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return integer_s_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1828
{integer}ms		{yylval.ID=strdup(yytext); yylval.ID[yyleng-2] = '\0'; return integer_ms_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1829
{fixed_point}d		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return fixed_point_d_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1830
{fixed_point}h		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return fixed_point_h_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1831
{fixed_point}m		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return fixed_point_m_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1832
{fixed_point}s		{yylval.ID=strdup(yytext); yylval.ID[yyleng-1] = '\0'; return fixed_point_s_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1833
{fixed_point}ms		{yylval.ID=strdup(yytext); yylval.ID[yyleng-2] = '\0'; return fixed_point_ms_token;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1834
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1835
_			/* do nothing - eat it up!*/
616
0c7663fdc8d3 Aloow use of SFC STEPs as variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 547
diff changeset
  1836
\#			{/*fprintf(stderr, "popping from time_literal_state (###)\n");*/ yy_pop_state(); return end_interval_token;}
0c7663fdc8d3 Aloow use of SFC STEPs as variables.
Mario de Sousa <msousa@fe.up.pt>
parents: 547
diff changeset
  1837
.			{/*fprintf(stderr, "time_literal_state: found invalid character '%s'. Aborting!\n", yytext);*/ ERROR;}
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1838
\n			{ERROR;}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  1839
}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1840
	/*******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1841
	/* B.1.2.2   Character Strings */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1842
	/*******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1843
{double_byte_character_string} {yylval.ID=strdup(yytext); return double_byte_character_string_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1844
{single_byte_character_string} {yylval.ID=strdup(yytext); return single_byte_character_string_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1845
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1846
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1847
	/******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1848
	/* B.1.2.1   Numeric literals */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1849
	/******************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1850
{integer}		{yylval.ID=strdup(yytext); return integer_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1851
{real}			{yylval.ID=strdup(yytext); return real_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1852
{binary_integer}	{yylval.ID=strdup(yytext); return binary_integer_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1853
{octal_integer} 	{yylval.ID=strdup(yytext); return octal_integer_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1854
{hex_integer} 		{yylval.ID=strdup(yytext); return hex_integer_token;}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1855
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1856
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1857
	/*****************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1858
	/* B.1.1 Letters, digits and identifiers */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1859
	/*****************************************/
866
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1860
<st_state>{identifier}/({st_whitespace_or_pragma_or_comment})"=>"	{yylval.ID=strdup(yytext); return sendto_identifier_token;}
c8c48ab075e0 Add support for nested comments
mjsousa
parents: 793
diff changeset
  1861
<il_state>{identifier}/({il_whitespace_or_pragma_or_comment})"=>"	{yylval.ID=strdup(yytext); return sendto_identifier_token;}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1862
{identifier} 				{yylval.ID=strdup(yytext);
75
0e381bdb8888 Fixing handling of task initialisation.
mario
parents: 74
diff changeset
  1863
					 // printf("returning identifier...: %s, %d\n", yytext, get_identifier_token(yytext));
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1864
					 return get_identifier_token(yytext);}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1865
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1866
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1867
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1868
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1869
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1870
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1871
	/************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1872
	/************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1873
	/************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1874
	/*****                                      *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1875
	/*****                                      *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1876
	/*****   T H E    L E F T O V E R S . . .   *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1877
	/*****                                      *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1878
	/*****                                      *****/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1879
	/************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1880
	/************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1881
	/************************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1882
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1883
	/* do the single character tokens...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1884
	 *
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1885
	 *  e.g.:  ':'  '('  ')'  '+'  '*'  ...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1886
	 */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1887
.	{return yytext[0];}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1888
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1889
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1890
%%
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1891
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1892
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1893
/*************************/
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1894
/* Tracking Functions... */
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1895
/*************************/
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1896
880
599e88d12f9a Track of line number correctly when input file has code with very long lines.
mjsousa
parents: 879
diff changeset
  1897
#define MAX_LINE_LENGTH 1024
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1898
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1899
tracking_t *GetNewTracking(FILE* in_file) {
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1900
  tracking_t* new_env = new tracking_t;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1901
  new_env->eof = 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1902
  new_env->lineNumber = 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1903
  new_env->currentChar = 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1904
  new_env->lineLength = 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1905
  new_env->currentTokenStart = 0;
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1906
  new_env->buffer = (char*)malloc(MAX_LINE_LENGTH);
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1907
  new_env->in_file = in_file;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1908
  return new_env;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1909
}
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1910
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1911
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1912
void FreeTracking(tracking_t *tracking) {
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1913
  free(tracking->buffer);
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1914
  delete tracking;
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1915
}
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1916
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1917
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1918
/* GetNextChar: reads a character from input */
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1919
int GetNextChar(char *b, int maxBuffer) {
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1920
  char *p;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1921
  
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1922
  if (  current_tracking->eof  )
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1923
    return 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1924
  
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1925
  while (  current_tracking->currentChar >= current_tracking->lineLength  ) {
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1926
    current_tracking->currentChar = 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1927
    current_tracking->currentTokenStart = 1;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1928
    current_tracking->eof = false;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1929
    
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  1930
    p = fgets(current_tracking->buffer, MAX_LINE_LENGTH, current_tracking->in_file);
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1931
    if (  p == NULL  ) {
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1932
      if (  ferror(current_tracking->in_file)  )
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1933
        return 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1934
      current_tracking->eof = true;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1935
      return 0;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1936
    }
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1937
    
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1938
    current_tracking->lineLength = strlen(current_tracking->buffer);
880
599e88d12f9a Track of line number correctly when input file has code with very long lines.
mjsousa
parents: 879
diff changeset
  1939
    
599e88d12f9a Track of line number correctly when input file has code with very long lines.
mjsousa
parents: 879
diff changeset
  1940
    /* only increment line number if the buffer was big enough to read the whole line! */
599e88d12f9a Track of line number correctly when input file has code with very long lines.
mjsousa
parents: 879
diff changeset
  1941
    char last_char = current_tracking->buffer[current_tracking->lineLength - 1];
599e88d12f9a Track of line number correctly when input file has code with very long lines.
mjsousa
parents: 879
diff changeset
  1942
    if (('\n' == last_char) || ('\r' == last_char))  // '\r' ---> CR, '\n'  ---> LF
599e88d12f9a Track of line number correctly when input file has code with very long lines.
mjsousa
parents: 879
diff changeset
  1943
      current_tracking->lineNumber++;
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1944
  }
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1945
  
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1946
  b[0] = current_tracking->buffer[current_tracking->currentChar];
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1947
  if (b[0] == ' ' || b[0] == '\t')
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1948
    current_tracking->currentTokenStart++;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1949
  current_tracking->currentChar++;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1950
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1951
  return b[0]==0?0:1;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1952
}
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1953
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1954
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1955
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1956
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1957
/***********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1958
/* Utility function definitions... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1959
/***********************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1960
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1961
/* print the include file stack to stderr... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1962
void print_include_stack(void) {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1963
  int i;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1964
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1965
  if ((include_stack_ptr - 1) >= 0)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1966
    fprintf (stderr, "in file "); 
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1967
  for (i = include_stack_ptr - 1; i >= 0; i--)
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
  1968
    fprintf (stderr, "included from file %s:%d\n", include_stack[i].filename, include_stack[i].env->lineNumber);
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1969
}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1970
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  1971
756
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1972
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1973
/* set the internal state variables of lexical analyser to process a new include file */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1974
void handle_include_file_(FILE *filehandle, const char *filename) {
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1975
  if (include_stack_ptr >= MAX_INCLUDE_DEPTH) {
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1976
    fprintf(stderr, "Includes nested too deeply\n");
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1977
    exit( 1 );
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1978
  }
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1979
  
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1980
  yyin = filehandle;
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1981
  
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1982
  include_stack[include_stack_ptr].buffer_state = YY_CURRENT_BUFFER;
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1983
  include_stack[include_stack_ptr].env = current_tracking;
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1984
  include_stack[include_stack_ptr].filename = current_filename;
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1985
  
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1986
  current_filename = strdup(filename);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1987
  current_tracking = GetNewTracking(yyin);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1988
  include_stack_ptr++;
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1989
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1990
  /* switch input buffer to new file... */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1991
  yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1992
}
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1993
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1994
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1995
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1996
/* insert the code (in <source_code>) into the source code we are parsing.
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1997
 * This is done by creating an artificial file with that new source code, and then 'including' the file
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  1998
 */
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  1999
void include_string_(const char *source_code) {
756
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2000
  FILE *tmp_file = tmpfile();
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2001
  
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2002
  if(tmp_file == NULL) {
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2003
    perror("Error creating temp file.");
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2004
    exit(EXIT_FAILURE);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2005
  }
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2006
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2007
  fwrite((void *)source_code, 1, strlen(source_code), tmp_file);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2008
  rewind(tmp_file);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2009
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2010
  /* now parse the tmp file, by asking flex to handle it as if it had been included with the (*#include ... *) pragma... */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2011
  handle_include_file_(tmp_file, "");
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2012
//fclose(tmp_file);  /* do NOT close file. It must only be closed when we finish reading from it! */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2013
}
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2014
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2015
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2016
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2017
/* Open an include file, and set the internal state variables of lexical analyser to process a new include file */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2018
void include_file(const char *filename) {
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2019
  FILE *filehandle = NULL;
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2020
  
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2021
  for (int i = 0; (INCLUDE_DIRECTORIES[i] != NULL) && (filehandle == NULL); i++) {
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2022
    char *full_name;
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2023
    full_name = strdup3(INCLUDE_DIRECTORIES[i], "/", filename);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2024
    if (full_name == NULL) {
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2025
      fprintf(stderr, "Out of memory!\n");
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2026
      exit( 1 );
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2027
    }
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2028
    filehandle = fopen(full_name, "r");
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2029
    free(full_name);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2030
  }
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2031
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2032
  if (NULL == filehandle) {
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2033
    fprintf(stderr, "Error opening included file %s\n", filename);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2034
    exit( 1 );
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2035
  }
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2036
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2037
  /* now process the new file... */
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2038
  handle_include_file_(filehandle, filename);
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2039
}
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2040
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2041
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2042
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2043
634f476cb60f Insert the auto generated enum datatype conversion functions after the TYPE...END_TYPE, instead of at the end of input file.
Mario de Sousa <msousa@fe.up.pt>
parents: 737
diff changeset
  2044
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2045
/* return all the text in the current token back to the input stream, except the first n chars. */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2046
void unput_text(unsigned int n) {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2047
  /* it seems that flex has a bug in that it will not correctly count the line numbers
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2048
   * if we return newlines back to the input stream. These newlines will be re-counted
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2049
   * a second time when they are processed again by flex.
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2050
   * We therefore determine how many newlines are in the text we are returning,
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2051
   * and decrement the line counter acordingly...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2052
   */
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  2053
  /*
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  2054
  unsigned int i;
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
  2055
  
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2056
  for (i = n; i < strlen(yytext); i++)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2057
    if (yytext[i] == '\n')
879
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  2058
      current_tracking->lineNumber--;
c61b2e370181 Fix memory leak in lexical parser.
mjsousa
parents: 876
diff changeset
  2059
  */
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2060
  /* now return all the text back to the input stream... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2061
  yyless(n);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2062
}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2063
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2064
547
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2065
/* return all the text in the current token back to the input stream, 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2066
 * but first return to the stream an additional character to mark the end of the token. 
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2067
 */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2068
void unput_and_mark(const char c) {
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2069
  char *yycopy = strdup( yytext ); /* unput() destroys yytext, so we copy it first */
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2070
  unput(c);
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2071
  for (int i = yyleng-1; i >= 0; i--)
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2072
    unput(yycopy[i]);
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2073
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2074
  free(yycopy);
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2075
}
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2076
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2077
dab341e80664 Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents: 415
diff changeset
  2078
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2079
/* The body_state tries to find a ';' before a END_PROGRAM, END_FUNCTION or END_FUNCTION_BLOCK or END_ACTION
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2080
 * To do so, it must ignore comments and pragmas. This means that we cannot do this in a signle lex rule.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2081
 * However, we must store any text we consume in every rule, so we can push it back into the buffer
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2082
 * once we have decided if we are parsing ST or IL code. The following functions manage that buffer used by
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2083
 * the body_state.
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2084
 */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2085
/* The buffer used by the body_state state */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2086
char *bodystate_buffer = NULL;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2087
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2088
/* append text to bodystate_buffer */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2089
void  append_bodystate_buffer(const char *text) {
1020
36fb9443b6ea fix bug introduced by commit 91bef6704b44 (parsing SFCs with transitions in ST and leading whitespace => endless loop)
mjsousa
parents: 1016
diff changeset
  2090
  //printf("<<<append_bodystate_buffer>>> %d <%s><%s>\n", bodystate_buffer, text, (NULL != bodystate_buffer)?bodystate_buffer:"NULL");
1016
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2091
  long int old_len = 0;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2092
  if (NULL != bodystate_buffer) old_len = strlen(bodystate_buffer);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2093
  bodystate_buffer = (char *)realloc(bodystate_buffer, old_len + strlen(text) + 1);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2094
  if (NULL == bodystate_buffer) ERROR;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2095
  strcpy(bodystate_buffer + old_len, text);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2096
  //printf("=<%s> %d %d\n", (NULL != bodystate_buffer)?bodystate_buffer:NULL, old_len + strlen(text) + 1, bodystate_buffer);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2097
}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2098
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2099
/* Return all data in bodystate_buffer back to flex, and empty bodystate_buffer. */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2100
void   unput_bodystate_buffer(void) {
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2101
  if (NULL == bodystate_buffer) ERROR;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2102
  //printf("<<<unput_bodystate_buffer>>>\n%s\n", bodystate_buffer);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2103
  
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2104
  for (long int i = strlen(bodystate_buffer)-1; i >= 0; i--)
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2105
    unput(bodystate_buffer[i]);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2106
  
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2107
  free(bodystate_buffer);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2108
  bodystate_buffer = NULL;
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2109
}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2110
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2111
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2112
/* Return true if bodystate_buffer is empty */
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2113
int  isempty_bodystate_buffer(void) {
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2114
  return (NULL == bodystate_buffer);
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2115
}
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2116
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2117
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2118
91bef6704b44 Add support for functions returning VOID (i.e. non-standard extension, allowing functions that do not return any data)
mjsousa
parents: 1014
diff changeset
  2119
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2120
/* Called by flex when it reaches the end-of-file */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2121
int yywrap(void)
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2122
{
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2123
  /* We reached the end of the input file... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2124
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2125
  /* Should we continue with another file? */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2126
  /* If so:
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2127
   *   open the new file...
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2128
   *   return 0;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2129
   */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2130
737
f6bc5230aadd Fix comments and code alignment
Mario de Sousa <msousa@fe.up.pt>
parents: 686
diff changeset
  2131
  /* to stop processing...
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2132
   *   return 1;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2133
   */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2134
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2135
  return 1;  /* Stop scanning at end of input file. */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2136
}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2137
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2138
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2139
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2140
/*******************************/
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2141
/* Public Interface for Bison. */
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2142
/*******************************/
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2143
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2144
/* The following functions will be called from inside bison code! */
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2145
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2146
void include_string(const char *source_code) {include_string_(source_code);}
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2147
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2148
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2149
/* Tell flex which file to parse. This function will not imediately start parsing the file.
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2150
 * To parse the file, you then need to call yyparse()
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2151
 *
761
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2152
 * Returns NULL on error opening the file (and a valid errno), or 0 on success.
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2153
 * Caller must close the file!
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2154
 */
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2155
FILE *parse_file(const char *filename) {
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2156
  FILE *filehandle = NULL;
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2157
761
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2158
  if((filehandle = fopen(filename, "r")) != NULL) {
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2159
    yyin = filehandle;
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2160
    current_filename = strdup(filename);
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2161
    current_tracking = GetNewTracking(yyin);
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2162
  }
7b52623a2f37 Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents: 757
diff changeset
  2163
  return filehandle;
757
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2164
}
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2165
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2166
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2167
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2168
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2169
f1fc4aa6f0e3 Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents: 756
diff changeset
  2170
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2171
/*************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2172
/* Include a main() function to test */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2173
/* the token parsing by flex....     */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2174
/*************************************/
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2175
#ifdef TEST_MAIN
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2176
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2177
#include "../util/symtable.hh"
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2178
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2179
yystype yylval;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2180
YYLTYPE yylloc;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2181
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2182
15
0b472e25eb16 Adding changes to make the compiler compatible with bison ver 2.3
mario
parents: 13
diff changeset
  2183
0b472e25eb16 Adding changes to make the compiler compatible with bison ver 2.3
mario
parents: 13
diff changeset
  2184
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2185
int get_identifier_token(const char *identifier_str) {return 0;}
175
dadda1b5401e Adding support for checking direct variable declared before using
lbessard
parents: 152
diff changeset
  2186
int get_direct_variable_token(const char *direct_variable_str) {return 0;}
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2187
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2188
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2189
int main(int argc, char **argv) {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2190
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2191
  FILE *in_file;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2192
  int res;
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
  2193
	
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2194
  if (argc == 1) {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2195
    /* Work as an interactive (command line) parser... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2196
    while((res=yylex()))
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2197
      fprintf(stderr, "(line %d)token: %d\n", yylineno, res);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2198
  } else {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2199
    /* Work as non-interactive (file) parser... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2200
    if((in_file = fopen(argv[1], "r")) == NULL) {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2201
      char *errmsg = strdup2("Error opening main file ", argv[1]);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2202
      perror(errmsg);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2203
      free(errmsg);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2204
      return -1;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2205
    }
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2206
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2207
    /* parse the file... */
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2208
    yyin = in_file;
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2209
    current_filename = argv[1];
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2210
    while(1) {
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2211
      res=yylex();
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2212
      fprintf(stderr, "(line %d)token: %d (%s)\n", yylineno, res, yylval.ID);
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2213
    }
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2214
  }
136
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
  2215
	
32bd7ef40897 Adding some improvements:
lbessard
parents: 131
diff changeset
  2216
	return 0;
0
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2217
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2218
}
fb772792efd1 Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff changeset
  2219
#endif