author | Andrey Skvortsov <andrej.skvortzov@gmail.com> |
Fri, 06 May 2016 10:48:37 +0300 | |
changeset 1005 | e27c2af708ad |
parent 952 | e984cfdf3b10 |
child 1010 | 242907849850 |
permissions | -rw-r--r-- |
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 | 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 | 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 | 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 | 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 |
/* We will not be using unput() in our flex code... */ |
267
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
155 |
/* NOTE: it seems that this #define is no longer needed, It has been |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
156 |
* replaced by %option nounput. |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
157 |
* Should we simply delete it? |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
158 |
* For now leave it in, in case someone is using an old version of flex. |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
159 |
* In any case, the most harm that can result in a warning message |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
160 |
* when compiling iec.flex.c: |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
161 |
* warning: ‘void yyunput(int, char*)’ defined but not used |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
162 |
*/ |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
163 |
#define YY_NO_UNPUT |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
164 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
165 |
/* 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
|
166 |
* 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
|
167 |
* 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
|
168 |
* 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
|
169 |
* 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
|
170 |
* 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
|
171 |
*/ |
415 | 172 |
/* |
173 |
*extern YYLTYPE yylloc; |
|
174 |
b*/ |
|
136 | 175 |
#define YY_INPUT(buf,result,max_size) {\ |
176 |
result = GetNextChar(buf, max_size);\ |
|
177 |
if ( result <= 0 )\ |
|
178 |
result = YY_NULL;\ |
|
179 |
} |
|
180 |
||
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
|
181 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
182 |
/* 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
|
183 |
* 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
|
184 |
* 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
|
185 |
*/ |
136 | 186 |
#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
|
187 |
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
|
188 |
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
|
189 |
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
|
190 |
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
|
191 |
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
|
192 |
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
|
193 |
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
|
194 |
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
|
195 |
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
|
196 |
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
|
197 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
198 |
|
879 | 199 |
|
200 |
||
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
201 |
/* 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
|
202 |
* 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
|
203 |
* one... |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
204 |
* 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
|
205 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
206 |
#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
|
207 |
('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
|
208 |
#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
|
209 |
#endif |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
210 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
211 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
212 |
/* 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
|
213 |
* in iec.y! |
3 | 214 |
* 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
|
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 |
* 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
|
217 |
* 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
|
218 |
* 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
|
219 |
* 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
|
220 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
221 |
//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
|
222 |
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
|
223 |
%} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
224 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
225 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
226 |
/***************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
227 |
/* 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
|
228 |
/***************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
229 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
230 |
%{ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
231 |
/* 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
|
232 |
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
|
233 |
/* 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
|
234 |
* 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
|
235 |
*/ |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
236 |
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
|
237 |
|
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
|
238 |
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
|
239 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
240 |
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
|
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 |
/****************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
246 |
/* 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
|
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
249 |
/* 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
|
250 |
* 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
|
251 |
* 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
|
252 |
* 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
|
253 |
* 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
|
254 |
* 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
|
255 |
* 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
|
256 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
257 |
* 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
|
258 |
* (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
|
259 |
* 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
|
260 |
* 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
|
261 |
* (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
|
262 |
* 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
|
263 |
* 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
|
264 |
* 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
|
265 |
* 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
|
266 |
* 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
|
267 |
* 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
|
268 |
* 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
|
269 |
* 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
|
270 |
* (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
|
271 |
* 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
|
272 |
* 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
|
273 |
* 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
|
274 |
* 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
|
275 |
* whitespace. |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
276 |
* 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
|
277 |
* 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
|
278 |
* 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
|
279 |
* 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
|
280 |
* 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
|
281 |
* 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
|
282 |
* (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
|
283 |
* 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
|
284 |
* 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
|
285 |
* 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
|
286 |
* 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
|
287 |
* 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
|
288 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
289 |
* 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
|
290 |
* 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
|
291 |
* 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
|
292 |
* 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
|
293 |
* 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
|
294 |
* 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
|
295 |
* 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
|
296 |
* 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
|
297 |
* 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
|
298 |
* 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
|
299 |
* 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
|
300 |
* 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
|
301 |
* 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
|
302 |
* 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
|
303 |
* 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
|
304 |
* 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
|
305 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
306 |
* 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
|
307 |
* 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
|
308 |
* 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
|
309 |
* 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
|
310 |
* 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
|
311 |
* must figure out what language is being parsed from the first few |
68 | 312 |
* 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
|
313 |
* 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
|
314 |
* 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
|
315 |
* 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
|
316 |
* to make it easier to remove them later on if need be. |
68 | 317 |
* Once the language being parsed has been identified, |
318 |
* the body state returns any matched text back to the buffer with unput(), |
|
319 |
* to be later matched correctly by the apropriate language parser (st, il or sfc). |
|
320 |
* |
|
321 |
* Aditionally, in sfc state it may further recursively enter the body state |
|
322 |
* once again. This is because an sfc body may contain ACTIONS, which are then |
|
323 |
* written in one of the three languages (ST, IL or SFC), so once again we need |
|
324 |
* to figure out which language the ACTION in the SFC was written in. We already |
|
325 |
* ahve all that done in the body state, so we recursively transition to the body |
|
326 |
* state once again. |
|
327 |
* Note that in this case, when coming out of the st/il state (whichever language |
|
328 |
* the action was written in) the sfc state will become active again. This is done by |
|
329 |
* pushing and poping the previously active state! |
|
330 |
* |
|
331 |
* The sfc_qualifier_state is required because when parsing actions within an |
|
332 |
* sfc, we will be expecting action qualifiers (N, P, R, S, DS, SD, ...). In order |
|
333 |
* to bison to work correctly, these qualifiers must be returned as tokens. However, |
|
334 |
* these tokens are not reserved keywords, which means it should be possible to |
|
335 |
* define variables/functions/FBs with any of these names (including |
|
336 |
* S and R which are special because they are also IL operators). So, when we are not |
|
337 |
* expecting any action qualifiers, flex does not return these tokens, and is free |
|
338 |
* to interpret them as previously defined variables/functions/... as the case may be. |
|
339 |
* |
|
547
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
340 |
* 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
|
341 |
* 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
|
342 |
* 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
|
343 |
* 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
|
344 |
* 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
|
345 |
* 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
|
346 |
* 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
|
347 |
* 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
|
348 |
* 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
|
349 |
* |
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
|
350 |
* 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
|
351 |
* 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
|
352 |
* 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
|
353 |
* 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
|
354 |
* 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
|
355 |
* 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
|
356 |
* 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
|
357 |
* 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
|
358 |
* 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
|
359 |
* 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
|
360 |
* 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
|
361 |
* 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
|
362 |
* 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
|
363 |
* 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
|
364 |
* 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
|
365 |
* |
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
|
366 |
* |
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 |
* 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
|
368 |
* --+ |
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 |
* | 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
|
370 |
* +------------> 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
|
371 |
* | | | 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
|
372 |
* | ------------------------------------------+ | 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
|
373 |
* | | | 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
|
374 |
* | v --+ |
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
375 |
* +---> INITIAL <-------> config |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
376 |
* | \ |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
377 |
* | V |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
378 |
* | header_state |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
379 |
* | | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
380 |
* | V |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
381 |
* 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
|
382 |
* ^ | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
383 |
* | | [using push()] |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
384 |
* | | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
385 |
* | V |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
386 |
* | body, |
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 |
* | | | | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
391 |
* | 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
|
392 |
* | 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
|
393 |
* | | | | [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
|
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 |
* |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
397 |
* 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
|
398 |
* 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
|
399 |
* 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
|
400 |
* - 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
|
401 |
* 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
|
402 |
* |
866 | 403 |
* |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
404 |
* 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
|
405 |
* 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
|
406 |
* (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
|
407 |
* (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
|
408 |
* (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
|
409 |
* |
68 | 410 |
* INITIAL -> goto(config_state) |
411 |
* (when a CONFIGURATION is found) |
|
866 | 412 |
* |
413 |
* INITIAL -> goto(header_state) |
|
414 |
* (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
|
415 |
* |
866 | 416 |
* header_state -> goto(vardecl_list_state) |
417 |
* (When the first VAR token is found, i.e. at begining of first VAR .. END_VAR declaration) |
|
418 |
* |
|
419 |
* vardecl_list_state -> push current state (vardecl_list_state), and goto(vardecl_state) |
|
420 |
* (when a VAR token is found) |
|
421 |
* vardecl_state -> pop() to (vardecl_list_state) |
|
422 |
* (when a END_VAR token is found) |
|
423 |
* |
|
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
424 |
* vardecl_list_state -> push current state (vardecl_list_state), and goto(body_state) |
866 | 425 |
* (when the last END_VAR is found!) |
426 |
* |
|
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
427 |
* body_state -> goto(sfc_state) |
68 | 428 |
* (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
|
429 |
* body_state -> goto(st_state) |
68 | 430 |
* (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
|
431 |
* body_state -> goto(il_state) |
68 | 432 |
* (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
|
433 |
* st_state -> pop() to vardecl_list_state |
68 | 434 |
* (when a END_FUNCTION, END_FUNCTION_BLOCK, END_PROGRAM, |
435 |
* 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
|
436 |
* il_state -> pop() to vardecl_list_state |
68 | 437 |
* (when a END_FUNCTION, END_FUNCTION_BLOCK, END_PROGRAM, |
438 |
* 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
|
439 |
* sfc_state -> pop() to vardecl_list_state |
68 | 440 |
* (when a END_FUNCTION, END_FUNCTION_BLOCK, or END_PROGRAM is found) |
866 | 441 |
* |
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
|
442 |
* 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
|
443 |
* (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
|
444 |
* 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
|
445 |
* (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
|
446 |
* 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
|
447 |
* (when a END_CONFIGURATION is found) |
866 | 448 |
* |
449 |
* |
|
450 |
* sfc_state -> push current state(sfc_state); goto(body_state) |
|
68 | 451 |
* (when parsing an action. This transition is requested by bison) |
866 | 452 |
* sfc_state -> push current state(sfc_state); goto(sfc_qualifier_state) |
68 | 453 |
* (when expecting an action qualifier. This transition is requested by bison) |
866 | 454 |
* sfc_qualifier_state -> pop() to sfc_state |
68 | 455 |
* (when no longer expecting an action qualifier. This transition is requested by bison) |
866 | 456 |
* |
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
457 |
* config_state -> push(config_state); goto(task_init_state) |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
458 |
* (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
|
459 |
* task_init_state -> pop() |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
460 |
* (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
|
461 |
* |
866 | 462 |
* |
463 |
* There is another secondary state machine for parsing comments, another for file_includes, |
|
464 |
* and yet another for time literals. |
|
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
465 |
*/ |
68 | 466 |
|
467 |
||
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
|
468 |
/* 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
|
469 |
%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
|
470 |
%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
|
471 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
472 |
/* we are parsing a configuration. */ |
3 | 473 |
%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
|
474 |
|
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
475 |
/* Inside a configuration, we are parsing a task initialisation parameters */ |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
476 |
/* 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
|
477 |
* 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
|
478 |
* are not keywords. |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
479 |
*/ |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
480 |
%s task_init_state |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
481 |
|
866 | 482 |
/* 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
|
483 |
/* This is not exclusive (%x) as we must be able to parse the identifier and data types of a function/FB */ |
866 | 484 |
%s header_state |
485 |
||
486 |
/* we are parsing a function, program or function block sequence of VAR..END_VAR delcarations */ |
|
487 |
%x vardecl_list_state |
|
488 |
/* a substate of the vardecl_list_state: we are inside a specific VAR .. END_VAR */ |
|
489 |
%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
|
490 |
|
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
491 |
/* we will be parsing a function body/action/transition. Whether il/st/sfc remains to be determined */ |
68 | 492 |
%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
|
493 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
494 |
/* we are parsing il code -> flex must return the EOL tokens! */ |
3 | 495 |
%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
|
496 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
497 |
/* we are parsing st code -> flex must not return the EOL tokens! */ |
3 | 498 |
%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
|
499 |
|
68 | 500 |
/* we are parsing sfc code -> flex must not return the EOL tokens! */ |
3 | 501 |
%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
|
502 |
|
68 | 503 |
/* we are parsing sfc code, and expecting an action qualifier. */ |
504 |
%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
|
505 |
|
86
1988bf1634da
Adding support for use of PRIORITY as identifier inside SFC.
mario
parents:
84
diff
changeset
|
506 |
/* 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
|
507 |
%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
|
508 |
|
547
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
509 |
/* 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
|
510 |
%x time_literal_state |
75 | 511 |
|
866 | 512 |
/* we are parsing a comment. */ |
513 |
%x comment_state |
|
514 |
||
75 | 515 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
516 |
/*******************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
517 |
/* 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
|
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
520 |
/* 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
|
521 |
* 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
|
522 |
* 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
|
523 |
* {#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
|
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
526 |
/* 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
|
527 |
%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
|
528 |
%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
|
529 |
%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
|
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
532 |
file_include_pragma_filename [^\"]* |
866 | 533 |
file_include_pragma_beg "{#include"{st_whitespace}\" |
534 |
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
|
535 |
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
|
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
538 |
%{ |
879 | 539 |
|
540 |
/* A counter to track the order by which each token is processed. |
|
541 |
* NOTE: This counter is not exactly linear (i.e., it does not get incremented by 1 for each token). |
|
542 |
* i.e.. it may get incremented by more than one between two consecutive tokens. |
|
543 |
* This is due to the fact that the counter gets incremented every 'user action' in flex, |
|
544 |
* however not every user action will result in a token being passed to bison. |
|
545 |
* Nevertheless this is still OK, as we are only interested in the relative |
|
546 |
* ordering of tokens... |
|
547 |
*/ |
|
548 |
static long int current_order = 0; |
|
549 |
||
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
550 |
typedef struct { |
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
551 |
int eof; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
552 |
int lineNumber; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
553 |
int currentChar; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
554 |
int lineLength; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
555 |
int currentTokenStart; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
556 |
char *buffer; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
557 |
FILE *in_file; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
558 |
} tracking_t; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
559 |
|
879 | 560 |
/* A forward declaration of a function defined at the end of this file. */ |
561 |
void FreeTracking(tracking_t *tracking); |
|
562 |
||
563 |
||
564 |
#define MAX_INCLUDE_DEPTH 16 |
|
565 |
||
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
566 |
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
|
567 |
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
|
568 |
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
|
569 |
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
|
570 |
} 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
|
571 |
|
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
572 |
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
|
573 |
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
|
574 |
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
|
575 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
576 |
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
|
577 |
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
|
578 |
".", |
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 |
"/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", |
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
|
581 |
"/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
|
582 |
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
|
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 |
/*****************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
589 |
/* 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
|
590 |
/*****************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
591 |
|
866 | 592 |
/* PRAGMAS */ |
593 |
/* ======= */ |
|
267
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
594 |
/* 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
|
595 |
* 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
|
596 |
* (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
|
597 |
* 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
|
598 |
* 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
|
599 |
* |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
600 |
* 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
|
601 |
* {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
|
602 |
* ... prototypes ... |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
603 |
* {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
|
604 |
* |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
605 |
* 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
|
606 |
* 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
|
607 |
* 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
|
608 |
* 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
|
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 |
|
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
611 |
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
|
612 |
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
|
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 |
|
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
615 |
/* Any other pragma... */ |
869 | 616 |
pragma ("{"[^}]*"}")|("{{"([^}]|"}"[^}])*"}}") |
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
617 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
618 |
|
866 | 619 |
|
620 |
/* COMMENTS */ |
|
621 |
/* ======== */ |
|
622 |
||
623 |
/* In order to allow nested comments, comments are handled by a specific comment_state state */ |
|
624 |
/* Whenever a "(*" is found, we push the current state onto the stack, and enter a new instance of the comment_state state. |
|
625 |
* Whenever a "*)" is found, we pop a state off the stack |
|
626 |
*/ |
|
627 |
||
628 |
/* comments... */ |
|
629 |
comment_beg "(*" |
|
630 |
comment_end "*)" |
|
631 |
||
632 |
/* However, bison has a shift/reduce conflict in bison, when parsing formal function/FB |
|
633 |
* invocations with the 'NOT <variable_name> =>' syntax (which needs two look ahead |
|
634 |
* tokens to be parsed correctly - and bison being LALR(1) only supports one). |
|
635 |
* The current work around requires flex to completely parse the '<variable_name> =>' |
|
636 |
* sequence. This sequence includes whitespace and/or comments between the |
|
637 |
* <variable_name> and the "=>" token. |
|
638 |
* |
|
639 |
* This flex rule (sendto_identifier_token) uses the whitespace/comment as trailing context, |
|
640 |
* which means we can not use the comment_state method of specifying/finding and ignoring |
|
641 |
* comments. |
|
642 |
* |
|
643 |
* For this reason only, we must also define what a complete comment looks like, so |
|
644 |
* it may be used in this rule. Since the rule uses the whitespace_or_comment |
|
645 |
* construct as trailing context, this definition of comment must not use any |
|
646 |
* trailing context either. |
|
647 |
* |
|
648 |
* Aditionally, it is not possible to define nested comments in flex without the use of |
|
649 |
* states, so for this particular location, we do NOT support nested comments. |
|
650 |
*/ |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
651 |
/* 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
|
652 |
* 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
|
653 |
* '(* Testing... ! ***** ******)' |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
654 |
* 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
|
655 |
* 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
|
656 |
* 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
|
657 |
*/ |
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_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 |
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
|
660 |
asterisk "*" |
866 | 661 |
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
|
662 |
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
|
663 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
664 |
|
866 | 665 |
|
666 |
/* 3.1 Whitespace */ |
|
667 |
/* ============== */ |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
668 |
/* |
866 | 669 |
* Whitespace is clearly defined (see IEC 61131-3 v2, section 2.1.4) |
670 |
* |
|
671 |
* Whitespace definition includes the newline character. |
|
672 |
* |
|
673 |
* However, the standard is inconsistent in that in IL the newline character |
|
674 |
* is considered a token (EOL - end of line). |
|
675 |
* In our implementation we therefore have two definitions of whitespace |
|
676 |
* - one for ST, that includes the newline character |
|
677 |
* - one for IL without the newline character. |
|
678 |
* Additionally, when parsing IL, the newline character is treated as the EOL token. |
|
679 |
* This requires the use of a state machine in the lexical parser that needs at least |
|
680 |
* some knowledge of the syntax itself. |
|
681 |
* |
|
682 |
* NOTE: Our definition of whitespace will only work in ASCII! |
|
683 |
* |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
684 |
* 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
|
685 |
* 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
|
686 |
* 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
|
687 |
* 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
|
688 |
* 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
|
689 |
* 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
|
690 |
* 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
|
691 |
* 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
|
692 |
* 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
|
693 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
694 |
|
866 | 695 |
st_whitespace [ \f\n\r\t\v]* |
696 |
il_whitespace [ \f\r\t\v]* |
|
697 |
||
698 |
st_whitespace_or_pragma_or_commentX ({st_whitespace})|({pragma})|({comment}) |
|
699 |
il_whitespace_or_pragma_or_commentX ({il_whitespace})|({pragma})|({comment}) |
|
700 |
||
701 |
st_whitespace_or_pragma_or_comment {st_whitespace_or_pragma_or_commentX}* |
|
702 |
il_whitespace_or_pragma_or_comment {il_whitespace_or_pragma_or_commentX}* |
|
703 |
||
704 |
||
705 |
||
706 |
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
|
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 |
/*****************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
711 |
/* 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
|
712 |
/*****************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
713 |
/* 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
|
714 |
* 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
|
715 |
* 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
|
716 |
* 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
|
717 |
* 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
|
718 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
719 |
* 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
|
720 |
* 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
|
721 |
* 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
|
722 |
* 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
|
723 |
* 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
|
724 |
* [\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
|
725 |
* 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
|
726 |
* 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
|
727 |
* 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
|
728 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
729 |
* 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
|
730 |
* 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
|
731 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
732 |
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
|
733 |
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
|
734 |
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
|
735 |
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
|
736 |
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
|
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 |
/*******************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
739 |
/* 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
|
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 |
/******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
743 |
/* 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
|
744 |
/******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
745 |
integer {digit}((_?{digit})*) |
547
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
746 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
747 |
/* 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
|
748 |
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
|
749 |
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
|
750 |
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
|
751 |
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
|
752 |
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
|
753 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
754 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
755 |
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
|
756 |
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
|
757 |
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
|
758 |
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
|
759 |
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
|
760 |
/* 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
|
761 |
* 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
|
762 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
763 |
* 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
|
764 |
* 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
|
765 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
766 |
* 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
|
767 |
* 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
|
768 |
* 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
|
769 |
* 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
|
770 |
* 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
|
771 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
772 |
* 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
|
773 |
* 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
|
774 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
775 |
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
|
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 |
/*******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
779 |
/* 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
|
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 |
/* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
782 |
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
|
783 |
<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
|
784 |
|'$$' |
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 |
|'$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
|
787 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
788 |
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
|
789 |
" = 0x22 |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
790 |
' = 0x27 |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
791 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
792 |
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
|
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 |
|
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_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
|
796 |
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
|
797 |
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
|
798 |
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
|
799 |
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
|
800 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
801 |
/* WARNING: |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
802 |
* 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
|
803 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
804 |
* 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
|
805 |
* 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
|
806 |
* 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
|
807 |
* 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
|
808 |
* 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
|
809 |
* 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
|
810 |
* 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
|
811 |
* 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
|
812 |
* 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
|
813 |
* 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
|
814 |
* 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
|
815 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
816 |
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
|
817 |
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
|
818 |
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
|
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
821 |
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
|
822 |
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
|
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 |
/************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
826 |
/* 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
|
827 |
/************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
828 |
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
|
829 |
|
547
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
830 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
831 |
/* 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
|
832 |
* 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
|
833 |
* 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
|
834 |
* definition instead! |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
835 |
* |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
836 |
* duration::= ('T' | 'TIME') '#' ['+'|'-'] interval |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
837 |
* 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
|
838 |
* fixed_point ::= integer [ '.' integer] |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
839 |
* 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
|
840 |
* 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
|
841 |
* 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
|
842 |
* 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
|
843 |
* milliseconds ::= fixed_point 'ms' |
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 |
* |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
846 |
* 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
|
847 |
* duration ::= ('T' | 'TIME') '#' ['-'] interval |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
848 |
* 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
|
849 |
* fixed_point ::= integer [ '.' integer] |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
850 |
* 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
|
851 |
* 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
|
852 |
* 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
|
853 |
* 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
|
854 |
* milliseconds ::= fixed_point 'ms' |
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 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
857 |
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
|
858 |
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
|
859 |
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
|
860 |
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
|
861 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
862 |
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
|
863 |
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
|
864 |
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
|
865 |
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
|
866 |
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
|
867 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
868 |
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
|
869 |
|
686
9b87606d4c07
Fix processing of TIME literals (submited by Andreas)
Mario de Sousa <msousa@fe.up.pt>
parents:
627
diff
changeset
|
870 |
|
547
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
871 |
/* 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
|
872 |
/* 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
|
873 |
* 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
|
874 |
* 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
|
875 |
*/ |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
876 |
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
|
877 |
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
|
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 |
/********************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
880 |
/* 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
|
881 |
/********************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
882 |
/* The correct definition, if the standard were to be followed... */ |
11 | 883 |
|
884 |
location_prefix [IQM] |
|
885 |
size_prefix [XBWDL] |
|
886 |
direct_variable_standard %{location_prefix}({size_prefix}?){integer}((.{integer})*) |
|
887 |
||
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
888 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
889 |
/* 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
|
890 |
* 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
|
891 |
* 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
|
892 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
893 |
/* 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
|
894 |
* 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
|
895 |
* 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
|
896 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
897 |
* 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
|
898 |
* 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
|
899 |
* 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
|
900 |
* 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
|
901 |
* 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
|
902 |
* 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
|
903 |
* VAR |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
904 |
* 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
|
905 |
* END_VAR |
11 | 906 |
* in which case we are currently using "%I3" as the variable |
907 |
* name. |
|
908 |
*/ |
|
547
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
909 |
/* direct_variable_matplc %{identifier} */ |
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}|{direct_variable_matplc} */ |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
911 |
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
|
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 |
/******************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
914 |
/* 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
|
915 |
/******************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
916 |
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
|
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 |
%% |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
922 |
/* 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
|
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 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
929 |
/***** 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
|
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 |
/*****************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
935 |
|
68 | 936 |
/***********************************************************/ |
937 |
/* Handle requests sent by bison for flex to change state. */ |
|
938 |
/***********************************************************/ |
|
13 | 939 |
if (get_goto_body_state()) { |
68 | 940 |
yy_push_state(body_state); |
13 | 941 |
rst_goto_body_state(); |
6 | 942 |
} |
3 | 943 |
|
68 | 944 |
if (get_goto_sfc_qualifier_state()) { |
945 |
yy_push_state(sfc_qualifier_state); |
|
946 |
rst_goto_sfc_qualifier_state(); |
|
947 |
} |
|
948 |
||
86
1988bf1634da
Adding support for use of PRIORITY as identifier inside SFC.
mario
parents:
84
diff
changeset
|
949 |
if (get_goto_sfc_priority_state()) { |
1988bf1634da
Adding support for use of PRIORITY as identifier inside SFC.
mario
parents:
84
diff
changeset
|
950 |
yy_push_state(sfc_priority_state); |
1988bf1634da
Adding support for use of PRIORITY as identifier inside SFC.
mario
parents:
84
diff
changeset
|
951 |
rst_goto_sfc_priority_state(); |
1988bf1634da
Adding support for use of PRIORITY as identifier inside SFC.
mario
parents:
84
diff
changeset
|
952 |
} |
1988bf1634da
Adding support for use of PRIORITY as identifier inside SFC.
mario
parents:
84
diff
changeset
|
953 |
|
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
954 |
if (get_goto_task_init_state()) { |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
955 |
yy_push_state(task_init_state); |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
956 |
rst_goto_task_init_state(); |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
957 |
} |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
958 |
|
68 | 959 |
if (get_pop_state()) { |
960 |
yy_pop_state(); |
|
961 |
rst_pop_state(); |
|
962 |
} |
|
963 |
||
964 |
/***************************/ |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
965 |
/* Handle the pragmas! */ |
68 | 966 |
/***************************/ |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
967 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
968 |
/* 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
|
969 |
<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
|
970 |
|
267
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
971 |
/* Pragmas sent to syntax analyser (bison) */ |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
972 |
{disable_code_generation_pragma} return disable_code_generation_pragma_token; |
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
973 |
{enable_code_generation_pragma} return enable_code_generation_pragma_token; |
866 | 974 |
<body_state,vardecl_list_state>{disable_code_generation_pragma} return disable_code_generation_pragma_token; |
975 |
<body_state,vardecl_list_state>{enable_code_generation_pragma} return enable_code_generation_pragma_token; |
|
267
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
976 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
977 |
/* Any other pragma we find, we just pass it up to the syntax parser... */ |
68 | 978 |
/* Note that the <body_state> state is exclusive, so we have to include it here too. */ |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
979 |
{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
|
980 |
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
|
981 |
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
|
982 |
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
|
983 |
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
|
984 |
} |
866 | 985 |
<body_state,vardecl_list_state>{pragma} {/* return the pragmma without the enclosing '{' and '}' */ |
701
562c01f82afb
Fix pragma with double bracket token stripping
Laurent Bessard
parents:
637
diff
changeset
|
986 |
int cut = yytext[1]=='{'?2:1; |
866 | 987 |
yytext[strlen(yytext)-cut] = '\0'; |
701
562c01f82afb
Fix pragma with double bracket token stripping
Laurent Bessard
parents:
637
diff
changeset
|
988 |
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
|
989 |
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
|
990 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
991 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
992 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
993 |
/*********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
994 |
/* 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
|
995 |
/*********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
996 |
<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
|
997 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
998 |
<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
|
999 |
/* 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
|
1000 |
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
|
1001 |
/* 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
|
1002 |
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
|
1003 |
/* 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
|
1004 |
} |
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 |
|
761
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
1007 |
<<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
|
1008 |
* 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
|
1009 |
* 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
|
1010 |
* 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
|
1011 |
* 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
|
1012 |
* 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
|
1013 |
* more END_OF_INPUT tokens. |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
1014 |
* |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
1015 |
* 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
|
1016 |
* 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
|
1017 |
* 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
|
1018 |
* |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
1019 |
* 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
|
1020 |
* 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
|
1021 |
* 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
|
1022 |
* |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
1023 |
* 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
|
1024 |
* bison to close it! |
76
ec7799ec929b
fixing include bug (only ocured for includes in main program file).
mario
parents:
75
diff
changeset
|
1025 |
*/ |
ec7799ec929b
fixing include bug (only ocured for includes in main program file).
mario
parents:
75
diff
changeset
|
1026 |
if (include_stack_ptr == 0) { |
761
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
1027 |
// fclose(yyin); // Must not do this!! |
879 | 1028 |
// FreeTracking(current_tracking); // Must not do this!! |
73 | 1029 |
/* yyterminate() terminates the scanner and returns a 0 to the |
1030 |
* scanner's caller, indicating "all done". |
|
1031 |
* |
|
1032 |
* Our syntax parser (written with bison) has the token |
|
1033 |
* END_OF_INPUT associated to the value 0, so even though |
|
1034 |
* we don't explicitly return the token END_OF_INPUT |
|
1035 |
* calling yyterminate() is equivalent to doing that. |
|
1036 |
*/ |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1037 |
yyterminate(); |
737
f6bc5230aadd
Fix comments and code alignment
Mario de Sousa <msousa@fe.up.pt>
parents:
686
diff
changeset
|
1038 |
} else { |
761
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
1039 |
fclose(yyin); |
879 | 1040 |
FreeTracking(current_tracking); |
136 | 1041 |
--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
|
1042 |
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
|
1043 |
yy_switch_to_buffer((include_stack[include_stack_ptr]).buffer_state); |
136 | 1044 |
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
|
1045 |
/* 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
|
1046 |
* 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
|
1047 |
* 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
|
1048 |
* 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
|
1049 |
*/ |
286
a4f4990d5c66
Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents:
267
diff
changeset
|
1050 |
/* 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
|
1051 |
* 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
|
1052 |
* 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
|
1053 |
* 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
|
1054 |
* 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
|
1055 |
*/ |
a4f4990d5c66
Adding tracking of filename in which token is located.
Mario de Sousa <msousa@fe.up.pt>
parents:
267
diff
changeset
|
1056 |
/* 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
|
1057 |
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
|
1058 |
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
|
1059 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1060 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1061 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1062 |
<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
|
1063 |
/* 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
|
1064 |
<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
|
1065 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1066 |
|
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 |
/* 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
|
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 |
|
866 | 1071 |
/* 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
|
1072 |
<INITIAL>{ |
68 | 1073 |
/* NOTE: 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
|
1074 |
* - 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
|
1075 |
* 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
|
1076 |
* 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
|
1077 |
* - 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
|
1078 |
* 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
|
1079 |
* 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
|
1080 |
* - 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
|
1081 |
* 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
|
1082 |
* construct! |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1083 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1084 |
* All the above means that we needn't worry about PROGRAMs, FUNCTIONs or |
68 | 1085 |
* 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
|
1086 |
* If the code has an error, and no VAR_END before the body, we will simply |
866 | 1087 |
* continue in the <vardecl_state> state, untill 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
|
1088 |
* or PROGAM. |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1089 |
*/ |
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
|
1090 |
|
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
|
1091 |
FUNCTION{st_whitespace} if (get_preparse_state()) BEGIN(get_pou_name_state); else BEGIN(header_state); return FUNCTION; |
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
|
1092 |
FUNCTION_BLOCK{st_whitespace} if (get_preparse_state()) BEGIN(get_pou_name_state); else BEGIN(header_state); return FUNCTION_BLOCK; |
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
|
1093 |
PROGRAM{st_whitespace} if (get_preparse_state()) BEGIN(get_pou_name_state); else BEGIN(header_state); return PROGRAM; |
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
|
1094 |
CONFIGURATION{st_whitespace} if (get_preparse_state()) BEGIN(get_pou_name_state); else BEGIN(config_state); return CONFIGURATION; |
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
|
1095 |
} |
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
|
1096 |
|
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
|
1097 |
<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
|
1098 |
{identifier} BEGIN(ignore_pou_state); yylval.ID=strdup(yytext); return identifier_token; |
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
|
1099 |
. BEGIN(ignore_pou_state); unput_text(0); |
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
|
1100 |
} |
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
|
1101 |
|
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
|
1102 |
<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
|
1103 |
END_FUNCTION unput_text(0); BEGIN(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
|
1104 |
END_FUNCTION_BLOCK unput_text(0); BEGIN(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
|
1105 |
END_PROGRAM unput_text(0); BEGIN(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
|
1106 |
END_CONFIGURATION unput_text(0); BEGIN(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
|
1107 |
.|\n {}/* Ignore text inside POU! (including the '\n' character!)) */ |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1108 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1109 |
|
68 | 1110 |
/* INITIAL -> 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
|
1111 |
/* required if the function, program, etc.. has no VAR block! */ |
6 | 1112 |
/* We comment it out since the standard does not allow this. */ |
1113 |
/* NOTE: Even if we were to include the following code, it */ |
|
1114 |
/* would have no effect whatsoever since the above */ |
|
1115 |
/* rules will take precendence! */ |
|
1116 |
/* |
|
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 |
<INITIAL>{ |
68 | 1118 |
FUNCTION BEGIN(body_state); return FUNCTION; |
1119 |
FUNCTION_BLOCK BEGIN(body_state); return FUNCTION_BLOCK; |
|
1120 |
PROGRAM BEGIN(body_state); return PROGRAM; |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1121 |
} |
6 | 1122 |
*/ |
1123 |
||
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1124 |
/* header_state -> (vardecl_list_state) */ |
866 | 1125 |
<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
|
1126 |
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
|
1127 |
VAR_INPUT | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1128 |
VAR_OUTPUT | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1129 |
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
|
1130 |
VAR_EXTERNAL | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1131 |
VAR_GLOBAL | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1132 |
VAR_TEMP | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1133 |
VAR_CONFIG | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1134 |
VAR_ACCESS unput_text(0); BEGIN(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
|
1135 |
} |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1136 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1137 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1138 |
/* vardecl_list_state -> (vardecl_state | body_state | INITIAL) */ |
866 | 1139 |
<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
|
1140 |
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
|
1141 |
VAR_OUTPUT | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1142 |
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
|
1143 |
VAR_EXTERNAL | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1144 |
VAR_GLOBAL | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1145 |
VAR_TEMP | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1146 |
VAR_CONFIG | |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1147 |
VAR_ACCESS | |
866 | 1148 |
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
|
1149 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1150 |
END_FUNCTION unput_text(0); BEGIN(INITIAL); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1151 |
END_FUNCTION_BLOCK unput_text(0); BEGIN(INITIAL); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1152 |
END_PROGRAM unput_text(0); BEGIN(INITIAL); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1153 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1154 |
. unput_text(0); yy_push_state(body_state); /* anything else, just change to body_state! */ |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1155 |
} |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1156 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1157 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1158 |
/* vardecl_list_state -> pop to $previous_state (vardecl_list_state) */ |
866 | 1159 |
<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
|
1160 |
END_VAR yy_pop_state(); return END_VAR; /* pop back to vardecl_list_state */ |
866 | 1161 |
} |
1162 |
||
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1163 |
|
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1164 |
/* body_state -> (il_state | st_state | sfc_state) */ |
68 | 1165 |
<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
|
1166 |
INITIAL_STEP unput_text(0); BEGIN(sfc_state); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1167 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1168 |
{qualified_identifier} unput_text(0); BEGIN(st_state); /* will always be followed by '[' for an array access, or ':=' as the left hand of an assignment statement */ |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1169 |
{direct_variable_standard} unput_text(0); BEGIN(st_state); /* will always be followed by ':=' as the left hand of an assignment statement */ |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1170 |
|
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1171 |
RETURN unput_text(0); BEGIN(st_state); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1172 |
IF unput_text(0); BEGIN(st_state); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1173 |
CASE unput_text(0); BEGIN(st_state); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1174 |
FOR unput_text(0); BEGIN(st_state); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1175 |
WHILE unput_text(0); BEGIN(st_state); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1176 |
EXIT unput_text(0); BEGIN(st_state); |
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1177 |
REPEAT unput_text(0); BEGIN(st_state); |
151 | 1178 |
|
6 | 1179 |
/* ':=' occurs only in transitions, and not Function or FB bodies! */ |
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1180 |
:= unput_text(0); BEGIN(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
|
1181 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1182 |
{identifier} {int token = get_identifier_token(yytext); |
866 | 1183 |
if ((token == prev_declared_fb_name_token) || (token == prev_declared_variable_name_token)) { |
1184 |
/* the code has a call to a function block OR has an assingment with a variable as the lvalue */ |
|
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1185 |
unput_text(0); BEGIN(st_state); |
866 | 1186 |
} else |
1187 |
if (token == prev_declared_derived_function_name_token) { |
|
1188 |
/* the code has a call to a function - must be IL */ |
|
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1189 |
unput_text(0); BEGIN(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
|
1190 |
} else { |
866 | 1191 |
/* Might be a lable in IL, or a bug in ST/IL code. We jump to IL */ |
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1192 |
unput_text(0); BEGIN(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
|
1193 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1194 |
} |
68 | 1195 |
|
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1196 |
. unput_text(0); BEGIN(il_state); /* Don't know what it could be. This is most likely a bug. Let's just to a random state... */ |
68 | 1197 |
} /* end of body_state lexical parser */ |
3 | 1198 |
|
866 | 1199 |
|
1200 |
||
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1201 |
/* (il_state | st_state) -> pop to $previous_state (vardecl_list_state or sfc_state) */ |
3 | 1202 |
<il_state,st_state>{ |
1203 |
END_FUNCTION yy_pop_state(); unput_text(0); |
|
1204 |
END_FUNCTION_BLOCK yy_pop_state(); unput_text(0); |
|
1205 |
END_PROGRAM yy_pop_state(); unput_text(0); |
|
1206 |
END_TRANSITION yy_pop_state(); unput_text(0); |
|
6 | 1207 |
END_ACTION yy_pop_state(); unput_text(0); |
3 | 1208 |
} |
1209 |
||
868
23f271534a7c
Fix the state machine that became broken 2 commits ago (when adding support for nested comments)
mjsousa
parents:
867
diff
changeset
|
1210 |
/* sfc_state -> pop to $previous_state (vardecl_list_state or sfc_state) */ |
4 | 1211 |
<sfc_state>{ |
1212 |
END_FUNCTION yy_pop_state(); unput_text(0); |
|
1213 |
END_FUNCTION_BLOCK yy_pop_state(); unput_text(0); |
|
1214 |
END_PROGRAM yy_pop_state(); unput_text(0); |
|
1215 |
} |
|
1216 |
||
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1217 |
/* 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
|
1218 |
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
|
1219 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1220 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1221 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1222 |
/***************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1223 |
/* 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
|
1224 |
/***************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1225 |
/* 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
|
1226 |
|
866 | 1227 |
/* The whitespace */ |
1228 |
<INITIAL,header_state,config_state,body_state,vardecl_list_state,vardecl_state,st_state,sfc_state,task_init_state,sfc_qualifier_state>{st_whitespace} /* Eat any whitespace */ |
|
1229 |
<il_state>{il_whitespace} /* Eat any whitespace */ |
|
1230 |
||
1231 |
/* 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
|
1232 |
<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
|
1233 |
{comment_beg} yy_push_state(comment_state); |
866 | 1234 |
<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
|
1235 |
{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
|
1236 |
{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
|
1237 |
. /* 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
|
1238 |
\n /* Ignore text inside comment! */ |
866 | 1239 |
} |
267
0a1204bcc9af
starting to add proper header file with declaration of standard functions
Mario de Sousa <msousa@fe.up.pt>
parents:
264
diff
changeset
|
1240 |
|
0
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 |
/* 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
|
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: '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
|
1245 |
* 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
|
1246 |
* 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
|
1247 |
* 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
|
1248 |
* 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
|
1249 |
* 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
|
1250 |
* 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
|
1251 |
* 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
|
1252 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1253 |
* 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
|
1254 |
* 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
|
1255 |
* 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
|
1256 |
* |
13 | 1257 |
* However, we have a dilema! Should we here also check for |
1258 |
* prev_declared_derived_function_name_token? |
|
1259 |
* If we do, then the 'MOD' default library function (defined in |
|
1260 |
* the standard) will always be returned as a function name, and |
|
1261 |
* it will therefore not be possible to use it as an operator as |
|
1262 |
* in the following ST expression 'X := Y MOD Z;' ! |
|
1263 |
* If we don't, then even it will not be possible to use 'MOD' |
|
1264 |
* as a funtion as in 'X := MOD(Y, Z);' |
|
1265 |
* We solve this by NOT testing for function names here, and |
|
1266 |
* 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
|
1267 |
*/ |
83
aeb7e0e53855
commenting out code no longer required. To be deleted later.
mario
parents:
82
diff
changeset
|
1268 |
/* |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1269 |
{identifier} {int token = get_identifier_token(yytext); |
81
de518eb7bc74
removing debug messages left by mistake in previous commit.
mario
parents:
80
diff
changeset
|
1270 |
// 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
|
1271 |
if ((token == prev_declared_variable_name_token) || |
13 | 1272 |
// (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
|
1273 |
(token == prev_declared_fb_name_token)) { |
83
aeb7e0e53855
commenting out code no longer required. To be deleted later.
mario
parents:
82
diff
changeset
|
1274 |
// if (token != identifier_token) |
aeb7e0e53855
commenting out code no longer required. To be deleted later.
mario
parents:
82
diff
changeset
|
1275 |
// * NOTE: if we replace the above uncommented conditions with |
13 | 1276 |
* the simple test of (token != identifier_token), then |
1277 |
* 'MOD' et al must be removed from the |
|
1278 |
* 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
|
1279 |
* // |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1280 |
yylval.ID=strdup(yytext); |
81
de518eb7bc74
removing debug messages left by mistake in previous commit.
mario
parents:
80
diff
changeset
|
1281 |
// 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
|
1282 |
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
|
1283 |
} |
83
aeb7e0e53855
commenting out code no longer required. To be deleted later.
mario
parents:
82
diff
changeset
|
1284 |
// 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
|
1285 |
// 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
|
1286 |
REJECT; |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1287 |
} |
83
aeb7e0e53855
commenting out code no longer required. To be deleted later.
mario
parents:
82
diff
changeset
|
1288 |
*/ |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1289 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1290 |
/******************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1291 |
/******************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1292 |
/******************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1293 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1294 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1295 |
/***** 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
|
1296 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1297 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1298 |
/******************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1299 |
/******************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1300 |
/******************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1301 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1302 |
|
934
2a42a68f4b59
Turn support of derefencing operator '^' an option (default is not supported).
mjsousa
parents:
933
diff
changeset
|
1303 |
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
|
1304 |
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
|
1305 |
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
|
1306 |
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
|
1307 |
|
82 | 1308 |
EN return EN; /* Keyword */ |
1309 |
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
|
1310 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1311 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1312 |
/******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1313 |
/* 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
|
1314 |
/******************************/ |
82 | 1315 |
TRUE return TRUE; /* Keyword */ |
257 | 1316 |
BOOL#1 return boolean_true_literal_token; |
1317 |
BOOL#TRUE return boolean_true_literal_token; |
|
1318 |
SAFEBOOL#1 {if (get_opt_safe_extensions()) {return safeboolean_true_literal_token;} else{REJECT;}} /* Keyword (Data Type) */ |
|
1319 |
SAFEBOOL#TRUE {if (get_opt_safe_extensions()) {return safeboolean_true_literal_token;} else{REJECT;}} /* Keyword (Data Type) */ |
|
1320 |
||
82 | 1321 |
FALSE return FALSE; /* Keyword */ |
257 | 1322 |
BOOL#0 return boolean_false_literal_token; |
1323 |
BOOL#FALSE return boolean_false_literal_token; |
|
1324 |
SAFEBOOL#0 {if (get_opt_safe_extensions()) {return safeboolean_false_literal_token;} else{REJECT;}} /* Keyword (Data Type) */ |
|
1325 |
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
|
1326 |
|
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 |
/* 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
|
1330 |
/************************/ |
82 | 1331 |
t# return T_SHARP; /* Delimiter */ |
1332 |
T# return T_SHARP; /* Delimiter */ |
|
1333 |
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
|
1334 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1335 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1336 |
/************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1337 |
/* 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
|
1338 |
/************************************/ |
82 | 1339 |
TIME_OF_DAY return TIME_OF_DAY; /* Keyword (Data Type) */ |
1340 |
TOD return TIME_OF_DAY; /* Keyword (Data Type) */ |
|
1341 |
DATE return DATE; /* Keyword (Data Type) */ |
|
1342 |
d# return D_SHARP; /* Delimiter */ |
|
1343 |
D# return D_SHARP; /* Delimiter */ |
|
1344 |
DATE_AND_TIME return DATE_AND_TIME; /* Keyword (Data Type) */ |
|
1345 |
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
|
1346 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1347 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1348 |
/***********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1349 |
/* 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
|
1350 |
/***********************************/ |
257 | 1351 |
BOOL return BOOL; /* Keyword (Data Type) */ |
1352 |
||
82 | 1353 |
BYTE return BYTE; /* Keyword (Data Type) */ |
1354 |
WORD return WORD; /* Keyword (Data Type) */ |
|
1355 |
DWORD return DWORD; /* Keyword (Data Type) */ |
|
1356 |
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
|
1357 |
|
257 | 1358 |
SINT return SINT; /* Keyword (Data Type) */ |
1359 |
INT return INT; /* Keyword (Data Type) */ |
|
1360 |
DINT return DINT; /* Keyword (Data Type) */ |
|
1361 |
LINT return LINT; /* Keyword (Data Type) */ |
|
1362 |
||
1363 |
USINT return USINT; /* Keyword (Data Type) */ |
|
1364 |
UINT return UINT; /* Keyword (Data Type) */ |
|
1365 |
UDINT return UDINT; /* Keyword (Data Type) */ |
|
1366 |
ULINT return ULINT; /* Keyword (Data Type) */ |
|
1367 |
||
1368 |
REAL return REAL; /* Keyword (Data Type) */ |
|
1369 |
LREAL return LREAL; /* Keyword (Data Type) */ |
|
1370 |
||
1371 |
WSTRING return WSTRING; /* Keyword (Data Type) */ |
|
1372 |
STRING return STRING; /* Keyword (Data Type) */ |
|
1373 |
||
1374 |
TIME return TIME; /* Keyword (Data Type) */ |
|
1375 |
DATE return DATE; /* Keyword (Data Type) */ |
|
1376 |
DT return DT; /* Keyword (Data Type) */ |
|
1377 |
TOD return TOD; /* Keyword (Data Type) */ |
|
1378 |
DATE_AND_TIME return DATE_AND_TIME; /* Keyword (Data Type) */ |
|
1379 |
TIME_OF_DAY return TIME_OF_DAY; /* Keyword (Data Type) */ |
|
1380 |
||
1381 |
/*****************************************************************/ |
|
1382 |
/* Keywords defined in "Safety Software Technical Specification" */ |
|
1383 |
/*****************************************************************/ |
|
1384 |
/* |
|
1385 |
* NOTE: The following keywords are define in |
|
1386 |
* "Safety Software Technical Specification, |
|
1387 |
* Part 1: Concepts and Function Blocks, |
|
1388 |
* Version 1.0 – Official Release" |
|
1389 |
* written by PLCopen - Technical Committee 5 |
|
1390 |
* |
|
1391 |
* We only support these extensions and keywords |
|
1392 |
* if the apropriate command line option is given. |
|
1393 |
*/ |
|
1394 |
SAFEBOOL {if (get_opt_safe_extensions()) {return SAFEBOOL;} else {REJECT;}} |
|
1395 |
||
1396 |
SAFEBYTE {if (get_opt_safe_extensions()) {return SAFEBYTE;} else {REJECT;}} |
|
1397 |
SAFEWORD {if (get_opt_safe_extensions()) {return SAFEWORD;} else {REJECT;}} |
|
1398 |
SAFEDWORD {if (get_opt_safe_extensions()) {return SAFEDWORD;} else{REJECT;}} |
|
1399 |
SAFELWORD {if (get_opt_safe_extensions()) {return SAFELWORD;} else{REJECT;}} |
|
1400 |
||
1401 |
SAFEREAL {if (get_opt_safe_extensions()) {return SAFESINT;} else{REJECT;}} |
|
1402 |
SAFELREAL {if (get_opt_safe_extensions()) {return SAFELREAL;} else{REJECT;}} |
|
1403 |
||
1404 |
SAFESINT {if (get_opt_safe_extensions()) {return SAFESINT;} else{REJECT;}} |
|
1405 |
SAFEINT {if (get_opt_safe_extensions()) {return SAFEINT;} else{REJECT;}} |
|
1406 |
SAFEDINT {if (get_opt_safe_extensions()) {return SAFEDINT;} else{REJECT;}} |
|
1407 |
SAFELINT {if (get_opt_safe_extensions()) {return SAFELINT;} else{REJECT;}} |
|
1408 |
||
1409 |
SAFEUSINT {if (get_opt_safe_extensions()) {return SAFEUSINT;} else{REJECT;}} |
|
1410 |
SAFEUINT {if (get_opt_safe_extensions()) {return SAFEUINT;} else{REJECT;}} |
|
1411 |
SAFEUDINT {if (get_opt_safe_extensions()) {return SAFEUDINT;} else{REJECT;}} |
|
1412 |
SAFEULINT {if (get_opt_safe_extensions()) {return SAFEULINT;} else{REJECT;}} |
|
1413 |
||
1414 |
/* SAFESTRING and SAFEWSTRING are not yet supported, i.e. checked correctly, in the semantic analyser (stage 3) */ |
|
1415 |
/* so it is best not to support them at all... */ |
|
1416 |
/* |
|
1417 |
SAFEWSTRING {if (get_opt_safe_extensions()) {return SAFEWSTRING;} else{REJECT;}} |
|
1418 |
SAFESTRING {if (get_opt_safe_extensions()) {return SAFESTRING;} else{REJECT;}} |
|
1419 |
*/ |
|
1420 |
||
1421 |
SAFETIME {if (get_opt_safe_extensions()) {return SAFETIME;} else{REJECT;}} |
|
1422 |
SAFEDATE {if (get_opt_safe_extensions()) {return SAFEDATE;} else{REJECT;}} |
|
1423 |
SAFEDT {if (get_opt_safe_extensions()) {return SAFEDT;} else{REJECT;}} |
|
1424 |
SAFETOD {if (get_opt_safe_extensions()) {return SAFETOD;} else{REJECT;}} |
|
1425 |
SAFEDATE_AND_TIME {if (get_opt_safe_extensions()) {return SAFEDATE_AND_TIME;} else{REJECT;}} |
|
1426 |
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
|
1427 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1428 |
/********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1429 |
/* 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
|
1430 |
/********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1431 |
/* 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
|
1432 |
/* 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
|
1433 |
* 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
|
1434 |
*/ |
82 | 1435 |
ANY return ANY; /* Keyword (Data Type) */ |
1436 |
ANY_DERIVED return ANY_DERIVED; /* Keyword (Data Type) */ |
|
1437 |
ANY_ELEMENTARY return ANY_ELEMENTARY; /* Keyword (Data Type) */ |
|
1438 |
ANY_MAGNITUDE return ANY_MAGNITUDE; /* Keyword (Data Type) */ |
|
1439 |
ANY_NUM return ANY_NUM; /* Keyword (Data Type) */ |
|
1440 |
ANY_REAL return ANY_REAL; /* Keyword (Data Type) */ |
|
1441 |
ANY_INT return ANY_INT; /* Keyword (Data Type) */ |
|
1442 |
ANY_BIT return ANY_BIT; /* Keyword (Data Type) */ |
|
1443 |
ANY_STRING return ANY_STRING; /* Keyword (Data Type) */ |
|
1444 |
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
|
1445 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1446 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1447 |
/********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1448 |
/* 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
|
1449 |
/********************************/ |
82 | 1450 |
":=" return ASSIGN; /* Delimiter */ |
1451 |
".." return DOTDOT; /* Delimiter */ |
|
1452 |
TYPE return TYPE; /* Keyword */ |
|
1453 |
END_TYPE return END_TYPE; /* Keyword */ |
|
1454 |
ARRAY return ARRAY; /* Keyword */ |
|
1455 |
OF return OF; /* Keyword */ |
|
1456 |
STRUCT return STRUCT; /* Keyword */ |
|
1457 |
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
|
1458 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1459 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1460 |
/*********************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1461 |
/* 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
|
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 |
/******************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1465 |
/* 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
|
1466 |
/******************************************/ |
82 | 1467 |
VAR_INPUT return VAR_INPUT; /* Keyword */ |
1468 |
VAR_OUTPUT return VAR_OUTPUT; /* Keyword */ |
|
1469 |
VAR_IN_OUT return VAR_IN_OUT; /* Keyword */ |
|
1470 |
VAR_EXTERNAL return VAR_EXTERNAL; /* Keyword */ |
|
1471 |
VAR_GLOBAL return VAR_GLOBAL; /* Keyword */ |
|
1472 |
END_VAR return END_VAR; /* Keyword */ |
|
1473 |
RETAIN return RETAIN; /* Keyword */ |
|
1474 |
NON_RETAIN return NON_RETAIN; /* Keyword */ |
|
1475 |
R_EDGE return R_EDGE; /* Keyword */ |
|
1476 |
F_EDGE return F_EDGE; /* Keyword */ |
|
1477 |
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
|
1478 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1479 |
|
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 |
/* 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
|
1482 |
/***********************/ |
82 | 1483 |
FUNCTION return FUNCTION; /* Keyword */ |
1484 |
END_FUNCTION return END_FUNCTION; /* Keyword */ |
|
1485 |
VAR return VAR; /* Keyword */ |
|
1486 |
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
|
1487 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1488 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1489 |
/*****************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1490 |
/* 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
|
1491 |
/*****************************/ |
82 | 1492 |
FUNCTION_BLOCK return FUNCTION_BLOCK; /* Keyword */ |
1493 |
END_FUNCTION_BLOCK return END_FUNCTION_BLOCK; /* Keyword */ |
|
1494 |
VAR_TEMP return VAR_TEMP; /* Keyword */ |
|
1495 |
VAR return VAR; /* Keyword */ |
|
1496 |
NON_RETAIN return NON_RETAIN; /* Keyword */ |
|
1497 |
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
|
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 |
/**********************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1501 |
/* 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
|
1502 |
/**********************/ |
82 | 1503 |
PROGRAM return PROGRAM; /* Keyword */ |
1504 |
END_PROGRAM return END_PROGRAM; /* 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
|
1505 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1506 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1507 |
/********************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1508 |
/* 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
|
1509 |
/********************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1510 |
/* 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
|
1511 |
.* 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
|
1512 |
* 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
|
1513 |
* 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
|
1514 |
*/ |
1
5d893a68be6e
Changes made since Mario visit at LOLITECH. Thanks again !
etisserant
parents:
0
diff
changeset
|
1515 |
|
82 | 1516 |
ACTION return ACTION; /* Keyword */ |
1517 |
END_ACTION return END_ACTION; /* Keyword */ |
|
1518 |
||
1519 |
TRANSITION return TRANSITION; /* Keyword */ |
|
1520 |
END_TRANSITION return END_TRANSITION; /* Keyword */ |
|
1521 |
FROM return FROM; /* Keyword */ |
|
1522 |
TO return TO; /* Keyword */ |
|
1523 |
||
1524 |
INITIAL_STEP return INITIAL_STEP; /* Keyword */ |
|
1525 |
STEP return STEP; /* Keyword */ |
|
1526 |
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
|
1527 |
|
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
1528 |
/* 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
|
1529 |
* 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
|
1530 |
* 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
|
1531 |
*/ |
86
1988bf1634da
Adding support for use of PRIORITY as identifier inside SFC.
mario
parents:
84
diff
changeset
|
1532 |
<sfc_priority_state>PRIORITY return PRIORITY; |
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
1533 |
|
68 | 1534 |
<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
|
1535 |
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
|
1536 |
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
|
1537 |
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
|
1538 |
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
|
1539 |
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
|
1540 |
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
|
1541 |
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
|
1542 |
P0 return P0; |
e7caa7d32ef5
Adding support for P0 and P1 qualifiers and fixing code generated for SL qualifier
Laurent Bessard
parents:
616
diff
changeset
|
1543 |
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
|
1544 |
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
|
1545 |
S return S; |
1
5d893a68be6e
Changes made since Mario visit at LOLITECH. Thanks again !
etisserant
parents:
0
diff
changeset
|
1546 |
} |
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.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
|
1551 |
/********************************/ |
82 | 1552 |
CONFIGURATION return CONFIGURATION; /* Keyword */ |
1553 |
END_CONFIGURATION return END_CONFIGURATION; /* Keyword */ |
|
1554 |
TASK return TASK; /* Keyword */ |
|
1555 |
RESOURCE return RESOURCE; /* Keyword */ |
|
1556 |
ON return ON; /* Keyword */ |
|
1557 |
END_RESOURCE return END_RESOURCE; /* Keyword */ |
|
1558 |
VAR_CONFIG return VAR_CONFIG; /* Keyword */ |
|
1559 |
VAR_ACCESS return VAR_ACCESS; /* Keyword */ |
|
1560 |
END_VAR return END_VAR; /* Keyword */ |
|
1561 |
WITH return WITH; /* Keyword */ |
|
1562 |
PROGRAM return PROGRAM; /* Keyword */ |
|
1563 |
RETAIN return RETAIN; /* Keyword */ |
|
1564 |
NON_RETAIN return NON_RETAIN; /* Keyword */ |
|
1565 |
READ_WRITE return READ_WRITE; /* Keyword */ |
|
1566 |
READ_ONLY return READ_ONLY; /* Keyword */ |
|
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
1567 |
|
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
1568 |
/* 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
|
1569 |
* 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
|
1570 |
* 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
|
1571 |
*/ |
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
1572 |
<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
|
1573 |
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
|
1574 |
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
|
1575 |
INTERVAL return INTERVAL; |
74
85af9521bf63
fixing identifier issues of PRIORITY, SINGLE, and INTERVAL
mario
parents:
73
diff
changeset
|
1576 |
} |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1577 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1578 |
/***********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1579 |
/* 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
|
1580 |
/***********************************/ |
3 | 1581 |
<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
|
1582 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1583 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1584 |
/*******************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1585 |
/* 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
|
1586 |
/*******************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1587 |
/* 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
|
1588 |
* 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
|
1589 |
* 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
|
1590 |
* 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
|
1591 |
* 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
|
1592 |
* 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
|
1593 |
* 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
|
1594 |
* 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
|
1595 |
* 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
|
1596 |
* 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
|
1597 |
* 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
|
1598 |
* 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
|
1599 |
* 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
|
1600 |
* 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
|
1601 |
* 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
|
1602 |
*/ |
68 | 1603 |
/* The following tokens clash with ST expression operators and Standard Functions */ |
73 | 1604 |
/* They are also keywords! */ |
82 | 1605 |
AND return AND; /* Keyword */ |
1606 |
MOD return MOD; /* Keyword */ |
|
1607 |
OR return OR; /* Keyword */ |
|
1608 |
XOR return XOR; /* Keyword */ |
|
1609 |
NOT return NOT; /* Keyword */ |
|
68 | 1610 |
|
1611 |
/* The following tokens clash with Standard Functions */ |
|
82 | 1612 |
/* They are keywords because they are a function name */ |
73 | 1613 |
<il_state>{ |
82 | 1614 |
ADD return ADD; /* Keyword (Standard Function) */ |
1615 |
DIV return DIV; /* Keyword (Standard Function) */ |
|
1616 |
EQ return EQ; /* Keyword (Standard Function) */ |
|
1617 |
GE return GE; /* Keyword (Standard Function) */ |
|
1618 |
GT return GT; /* Keyword (Standard Function) */ |
|
1619 |
LE return LE; /* Keyword (Standard Function) */ |
|
1620 |
LT return LT; /* Keyword (Standard Function) */ |
|
1621 |
MUL return MUL; /* Keyword (Standard Function) */ |
|
1622 |
NE return NE; /* Keyword (Standard Function) */ |
|
1623 |
SUB return SUB; /* Keyword (Standard Function) */ |
|
73 | 1624 |
} |
68 | 1625 |
|
1626 |
/* The following tokens clash with SFC action qualifiers */ |
|
82 | 1627 |
/* They are not keywords! */ |
73 | 1628 |
<il_state>{ |
68 | 1629 |
S return S; |
1630 |
R return R; |
|
73 | 1631 |
} |
68 | 1632 |
|
1633 |
/* The following tokens clash with ST expression operators */ |
|
82 | 1634 |
& return AND2; /* NOT a Delimiter! */ |
68 | 1635 |
|
1636 |
/* The following tokens have no clashes */ |
|
82 | 1637 |
/* They are not keywords! */ |
73 | 1638 |
<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
|
1639 |
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
|
1640 |
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
|
1641 |
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
|
1642 |
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
|
1643 |
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
|
1644 |
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
|
1645 |
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
|
1646 |
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
|
1647 |
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
|
1648 |
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
|
1649 |
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
|
1650 |
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
|
1651 |
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
|
1652 |
&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
|
1653 |
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
|
1654 |
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
|
1655 |
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
|
1656 |
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
|
1657 |
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
|
1658 |
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
|
1659 |
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
|
1660 |
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
|
1661 |
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
|
1662 |
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
|
1663 |
JMPCN return JMPCN; |
73 | 1664 |
} |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1665 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1666 |
/***********************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1667 |
/* 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
|
1668 |
/***********************/ |
82 | 1669 |
"**" return OPER_EXP; /* NOT a Delimiter! */ |
1670 |
"<>" return OPER_NE; /* NOT a Delimiter! */ |
|
1671 |
">=" return OPER_GE; /* NOT a Delimiter! */ |
|
1672 |
"<=" return OPER_LE; /* NOT a Delimiter! */ |
|
1673 |
& return AND2; /* NOT a Delimiter! */ |
|
1674 |
AND return AND; /* Keyword */ |
|
1675 |
XOR return XOR; /* Keyword */ |
|
1676 |
OR return OR; /* Keyword */ |
|
1677 |
NOT return NOT; /* Keyword */ |
|
1678 |
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
|
1679 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1680 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1681 |
/*****************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1682 |
/* 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
|
1683 |
/*****************************************/ |
82 | 1684 |
:= return ASSIGN; /* Delimiter */ |
1685 |
=> return SENDTO; /* Delimiter */ |
|
1686 |
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
|
1687 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1688 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1689 |
/********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1690 |
/* 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
|
1691 |
/********************************/ |
82 | 1692 |
IF return IF; /* Keyword */ |
1693 |
THEN return THEN; /* Keyword */ |
|
1694 |
ELSIF return ELSIF; /* Keyword */ |
|
1695 |
ELSE return ELSE; /* Keyword */ |
|
1696 |
END_IF return END_IF; /* Keyword */ |
|
1697 |
||
1698 |
CASE return CASE; /* Keyword */ |
|
1699 |
OF return OF; /* Keyword */ |
|
1700 |
ELSE return ELSE; /* Keyword */ |
|
1701 |
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
|
1702 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1703 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1704 |
/********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1705 |
/* 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
|
1706 |
/********************************/ |
82 | 1707 |
FOR return FOR; /* Keyword */ |
1708 |
TO return TO; /* Keyword */ |
|
1709 |
BY return BY; /* Keyword */ |
|
1710 |
DO return DO; /* Keyword */ |
|
1711 |
END_FOR return END_FOR; /* Keyword */ |
|
1712 |
||
1713 |
WHILE return WHILE; /* Keyword */ |
|
1714 |
DO return DO; /* Keyword */ |
|
1715 |
END_WHILE return END_WHILE; /* Keyword */ |
|
1716 |
||
1717 |
REPEAT return REPEAT; /* Keyword */ |
|
1718 |
UNTIL return UNTIL; /* Keyword */ |
|
1719 |
END_REPEAT return END_REPEAT; /* Keyword */ |
|
1720 |
||
1721 |
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
|
1722 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1723 |
|
257 | 1724 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1725 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1726 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1727 |
|
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 |
/********************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1731 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1732 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1733 |
/***** 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
|
1734 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1735 |
/***** *****/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1736 |
/********************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1737 |
/********************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1738 |
/********************************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1739 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1740 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1741 |
/********************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1742 |
/* 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
|
1743 |
/********************************************/ |
175
dadda1b5401e
Adding support for checking direct variable declared before using
lbessard
parents:
152
diff
changeset
|
1744 |
{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
|
1745 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1746 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1747 |
/******************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1748 |
/* 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
|
1749 |
/******************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1750 |
{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
|
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 |
/************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1754 |
/* 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
|
1755 |
/************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1756 |
{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
|
1757 |
{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
|
1758 |
{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
|
1759 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
1760 |
<time_literal_state>{ |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
1761 |
{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
|
1762 |
{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
|
1763 |
{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
|
1764 |
{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
|
1765 |
{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
|
1766 |
{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
|
1767 |
{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
|
1768 |
{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
|
1769 |
{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
|
1770 |
{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
|
1771 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
1772 |
_ /* 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
|
1773 |
\# {/*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
|
1774 |
. {/*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
|
1775 |
\n {ERROR;} |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
1776 |
} |
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1777 |
/*******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1778 |
/* 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
|
1779 |
/*******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1780 |
{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
|
1781 |
{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
|
1782 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1783 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1784 |
/******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1785 |
/* 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
|
1786 |
/******************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1787 |
{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
|
1788 |
{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
|
1789 |
{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
|
1790 |
{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
|
1791 |
{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
|
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 |
/* 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
|
1796 |
/*****************************************/ |
866 | 1797 |
<st_state>{identifier}/({st_whitespace_or_pragma_or_comment})"=>" {yylval.ID=strdup(yytext); return sendto_identifier_token;} |
1798 |
<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
|
1799 |
{identifier} {yylval.ID=strdup(yytext); |
75 | 1800 |
// 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
|
1801 |
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
|
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1806 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1807 |
|
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 |
/***** *****/ |
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 |
/***** 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
|
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 |
/************************************************/ |
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 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1820 |
/* 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
|
1821 |
* |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1822 |
* 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
|
1823 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1824 |
. {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
|
1825 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1826 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1827 |
%% |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1828 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1829 |
|
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1830 |
/*************************/ |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1831 |
/* Tracking Functions... */ |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1832 |
/*************************/ |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1833 |
|
880
599e88d12f9a
Track of line number correctly when input file has code with very long lines.
mjsousa
parents:
879
diff
changeset
|
1834 |
#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
|
1835 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1836 |
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
|
1837 |
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
|
1838 |
new_env->eof = 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1839 |
new_env->lineNumber = 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1840 |
new_env->currentChar = 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1841 |
new_env->lineLength = 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1842 |
new_env->currentTokenStart = 0; |
879 | 1843 |
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
|
1844 |
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
|
1845 |
return new_env; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1846 |
} |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1847 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1848 |
|
879 | 1849 |
void FreeTracking(tracking_t *tracking) { |
1850 |
free(tracking->buffer); |
|
1851 |
delete tracking; |
|
1852 |
} |
|
1853 |
||
1854 |
||
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1855 |
/* 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
|
1856 |
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
|
1857 |
char *p; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1858 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1859 |
if ( current_tracking->eof ) |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1860 |
return 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1861 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1862 |
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
|
1863 |
current_tracking->currentChar = 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1864 |
current_tracking->currentTokenStart = 1; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1865 |
current_tracking->eof = false; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1866 |
|
879 | 1867 |
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
|
1868 |
if ( p == NULL ) { |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1869 |
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
|
1870 |
return 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1871 |
current_tracking->eof = true; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1872 |
return 0; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1873 |
} |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1874 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1875 |
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
|
1876 |
|
599e88d12f9a
Track of line number correctly when input file has code with very long lines.
mjsousa
parents:
879
diff
changeset
|
1877 |
/* 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
|
1878 |
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
|
1879 |
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
|
1880 |
current_tracking->lineNumber++; |
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1881 |
} |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1882 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1883 |
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
|
1884 |
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
|
1885 |
current_tracking->currentTokenStart++; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1886 |
current_tracking->currentChar++; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1887 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1888 |
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
|
1889 |
} |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1890 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1891 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1892 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1893 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1894 |
/***********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1895 |
/* 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
|
1896 |
/***********************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1897 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1898 |
/* 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
|
1899 |
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
|
1900 |
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
|
1901 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1902 |
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
|
1903 |
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
|
1904 |
for (i = include_stack_ptr - 1; i >= 0; i--) |
136 | 1905 |
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
|
1906 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1907 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1908 |
|
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
|
1909 |
|
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
|
1910 |
/* 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
|
1911 |
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
|
1912 |
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
|
1913 |
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
|
1914 |
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
|
1915 |
} |
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
|
1916 |
|
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
|
1917 |
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
|
1918 |
|
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
|
1919 |
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
|
1920 |
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
|
1921 |
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
|
1922 |
|
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
|
1923 |
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
|
1924 |
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
|
1925 |
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
|
1926 |
|
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
|
1927 |
/* 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
|
1928 |
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
|
1929 |
} |
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
|
1930 |
|
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
|
1931 |
|
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
|
1932 |
|
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
|
1933 |
/* 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
|
1934 |
* 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
|
1935 |
*/ |
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
1936 |
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
|
1937 |
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
|
1938 |
|
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
|
1939 |
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
|
1940 |
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
|
1941 |
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
|
1942 |
} |
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
|
1943 |
|
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
|
1944 |
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
|
1945 |
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
|
1946 |
|
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
|
1947 |
/* 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
|
1948 |
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
|
1949 |
//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
|
1950 |
} |
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
|
1951 |
|
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
|
1952 |
|
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
|
1953 |
|
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
|
1954 |
/* 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
|
1955 |
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
|
1956 |
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
|
1957 |
|
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
|
1958 |
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
|
1959 |
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
|
1960 |
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
|
1961 |
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
|
1962 |
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
|
1963 |
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
|
1964 |
} |
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
|
1965 |
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
|
1966 |
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
|
1967 |
} |
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
|
1968 |
|
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
|
1969 |
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
|
1970 |
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
|
1971 |
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
|
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 |
|
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 |
/* 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
|
1975 |
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
|
1976 |
} |
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 |
|
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 |
|
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 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1982 |
/* 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
|
1983 |
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
|
1984 |
/* 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
|
1985 |
* 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
|
1986 |
* 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
|
1987 |
* 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
|
1988 |
* 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
|
1989 |
*/ |
879 | 1990 |
/* |
1991 |
unsigned int i; |
|
136 | 1992 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1993 |
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
|
1994 |
if (yytext[i] == '\n') |
879 | 1995 |
current_tracking->lineNumber--; |
1996 |
*/ |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
1997 |
/* 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
|
1998 |
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
|
1999 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2000 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2001 |
|
547
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2002 |
/* 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
|
2003 |
* 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
|
2004 |
*/ |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2005 |
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
|
2006 |
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
|
2007 |
unput(c); |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2008 |
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
|
2009 |
unput(yycopy[i]); |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2010 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2011 |
free(yycopy); |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2012 |
} |
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2013 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2014 |
|
dab341e80664
Fix parsing os TIME literals & rename the extract_integer() function.
mjsousa <msousa@fe.up.pt>
parents:
415
diff
changeset
|
2015 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2016 |
/* 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
|
2017 |
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
|
2018 |
{ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2019 |
/* 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
|
2020 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2021 |
/* 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
|
2022 |
/* 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
|
2023 |
* 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
|
2024 |
* 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
|
2025 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2026 |
|
737
f6bc5230aadd
Fix comments and code alignment
Mario de Sousa <msousa@fe.up.pt>
parents:
686
diff
changeset
|
2027 |
/* 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
|
2028 |
* 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
|
2029 |
*/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2030 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2031 |
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
|
2032 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2033 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2034 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2035 |
|
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2036 |
/*******************************/ |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2037 |
/* Public Interface for Bison. */ |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2038 |
/*******************************/ |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2039 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2040 |
/* 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
|
2041 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2042 |
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
|
2043 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2044 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2045 |
/* 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
|
2046 |
* 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
|
2047 |
* |
761
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2048 |
* 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
|
2049 |
* Caller must close the file! |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2050 |
*/ |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2051 |
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
|
2052 |
FILE *filehandle = NULL; |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2053 |
|
761
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2054 |
if((filehandle = fopen(filename, "r")) != NULL) { |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2055 |
yyin = filehandle; |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2056 |
current_filename = strdup(filename); |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2057 |
current_tracking = GetNewTracking(yyin); |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2058 |
} |
7b52623a2f37
Allow bison to ask for an END_OF_INPUT token multiple times!
mjsousa
parents:
757
diff
changeset
|
2059 |
return filehandle; |
757
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2060 |
} |
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2061 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2062 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2063 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2064 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2065 |
|
f1fc4aa6f0e3
Code cleanup: move tracking functions to flex.
Mario de Sousa <msousa@fe.up.pt>
parents:
756
diff
changeset
|
2066 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2067 |
/*************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2068 |
/* 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
|
2069 |
/* 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
|
2070 |
/*************************************/ |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2071 |
#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
|
2072 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2073 |
#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
|
2074 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2075 |
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
|
2076 |
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
|
2077 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2078 |
|
15
0b472e25eb16
Adding changes to make the compiler compatible with bison ver 2.3
mario
parents:
13
diff
changeset
|
2079 |
|
0b472e25eb16
Adding changes to make the compiler compatible with bison ver 2.3
mario
parents:
13
diff
changeset
|
2080 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2081 |
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
|
2082 |
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
|
2083 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2084 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2085 |
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
|
2086 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2087 |
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
|
2088 |
int res; |
136 | 2089 |
|
0
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2090 |
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
|
2091 |
/* 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
|
2092 |
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
|
2093 |
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
|
2094 |
} else { |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2095 |
/* 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
|
2096 |
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
|
2097 |
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
|
2098 |
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
|
2099 |
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
|
2100 |
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
|
2101 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2102 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2103 |
/* 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
|
2104 |
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
|
2105 |
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
|
2106 |
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
|
2107 |
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
|
2108 |
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
|
2109 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2110 |
} |
136 | 2111 |
|
2112 |
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
|
2113 |
|
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2114 |
} |
fb772792efd1
Initial commit. Last MatPLC CVS with some makefile inclusion removed in order to compile fine out of MatPLC.
etisserant
parents:
diff
changeset
|
2115 |
#endif |