147 lines
3.9 KiB
C
Executable File
147 lines
3.9 KiB
C
Executable File
/* Filename: table.h
|
|
* Transition Table and function declarations necessa`ry for the scanner implementation
|
|
* as required for CST8152 - Assignment #2.
|
|
* Author: Victor Fernandes, 040772243
|
|
* Version: 1.17.1
|
|
* Date: 30 January 2017
|
|
* Provided by: Svillen Ranev
|
|
*/
|
|
|
|
#ifndef TABLE_H_
|
|
#define TABLE_H_
|
|
|
|
#ifndef BUFFER_H_
|
|
#include "buffer.h"
|
|
#endif
|
|
|
|
#ifndef TOKEN_H_
|
|
#include "token.h"
|
|
#endif
|
|
|
|
#ifndef NULL
|
|
#include <_null.h> /* NULL pointer constant is defined there */
|
|
#endif
|
|
|
|
/* Source end-of-file (SEOF) sentinel symbol
|
|
* '\0' or only one of the folowing constants: 255, 0xFF , EOF
|
|
*/
|
|
|
|
/* Single-lexeme tokens processed separately one by one
|
|
* in the token-driven part of the scanner
|
|
* '=' , ' ' , '(' , ')' , '{' , '}' , == , <> , '>' , '<' ,
|
|
* space
|
|
* !<comment , ',' , '"' , ';' , '-' , '+' , '*' , '/', << ,
|
|
* .AND., .OR. , SEOF, 'wrong symbol',
|
|
*/
|
|
|
|
#define ES 12 /* Error state */
|
|
#define ESWR 13 /* Error state (no retract) */
|
|
#define IS -1 /* Invalid state */
|
|
|
|
/* State transition table definition */
|
|
|
|
#define TABLE_COLUMNS 7
|
|
/*transition table - type of states defined in separate table */
|
|
int st_table[][TABLE_COLUMNS] = {
|
|
/* INPUT COLUMNS:
|
|
COLUMN # | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|[a-zA-Z]| 0 |[1-7]|[8-9]| . | # | other |
|
|
*/
|
|
/* State 0 */ {1, 6 , 4 , 4 , ES , ES , ES},
|
|
/* State 1 */ {1, 1 , 1 , 1 , 2 , 3 , 2 },
|
|
/* State 2 */ {IS, IS , IS, IS, IS , IS , IS},
|
|
/* State 3 */ {IS, IS , IS, IS, IS , IS , IS},
|
|
/* State 4 */ {ES, 4 , 4 , 4 , 7 , 5 , 5 },
|
|
/* State 5 */ {IS, IS , IS, IS, IS , IS , IS},
|
|
/* State 6 */ {ES, 9 , 9 , ES, 7 , ES , 5 },
|
|
/* State 7 */ {8 , 7 , 7 , 7, 8 , 8 , 8 },
|
|
/* State 8 */ {IS, IS , IS, IS, IS , IS , IS},
|
|
/* State 9 */ {ES, ES , 11, ES, ES , ES , 10},
|
|
/* State 10 */ {IS, IS , IS, IS, IS , IS , IS},
|
|
/* State 11 */ {ES, 11 , 11, ES, ES , ES , 10},
|
|
/* State 12 */ {IS, IS , IS, IS, IS , IS , IS},
|
|
/* State 13 */ {IS, IS , IS, IS, IS , IS , IS}
|
|
|
|
};
|
|
/* Accepting state table definition */
|
|
#define ASWR 1 /* accepting state with retract */
|
|
#define ASNR 2 /* accepting state with no retract */
|
|
#define NOAS 0 /* not accepting state */
|
|
|
|
int as_table[] = {
|
|
|
|
/* State 0 */ NOAS,
|
|
/* State 1 */ NOAS,
|
|
/* State 2 */ ASWR,
|
|
/* State 3 */ ASNR,
|
|
/* State 4 */ NOAS,
|
|
/* State 5 */ ASWR,
|
|
/* State 6 */ NOAS,
|
|
/* State 7 */ NOAS,
|
|
/* State 8 */ ASWR,
|
|
/* State 9 */ NOAS,
|
|
/* State 10 */ ASWR,
|
|
/* State 11 */ NOAS,
|
|
/* State 12 */ ASNR,
|
|
/* State 13 */ ASWR
|
|
|
|
};
|
|
|
|
/* Accepting action function declarations */
|
|
|
|
Token aa_func02(char* lexeme); /* AVID/KW */
|
|
Token aa_func03(char* lexeme); /* SVID */
|
|
Token aa_func05(char* lexeme); /* DIL */
|
|
Token aa_func08(char* lexeme); /* FPL */
|
|
Token aa_func10(char* lexeme); /* OIL */
|
|
Token aa_func12(char* lexeme); /* ES ASNR */
|
|
Token aa_func13(char* lexeme); /* ES ASWR */
|
|
|
|
/* defining a new type: pointer to function (of one char * argument)
|
|
returning Token
|
|
*/
|
|
|
|
typedef Token(*PTR_AAF)(char *lexeme);
|
|
|
|
|
|
/* Accepting function (action) callback table (array) definition */
|
|
/* If you do not want to use the typedef, the equvalent declaration is:
|
|
* Token (*aa_table[])(char lexeme[]) = {
|
|
*/
|
|
|
|
PTR_AAF aa_table[] = {
|
|
|
|
/* State 0 */ NULL,
|
|
/* State 1 */ NULL,
|
|
/* State 2 */ aa_func02,
|
|
/* State 3 */ aa_func03,
|
|
/* State 4 */ NULL,
|
|
/* State 5 */ aa_func05,
|
|
/* State 6 */ NULL,
|
|
/* State 7 */ NULL,
|
|
/* State 8 */ aa_func08,
|
|
/* State 9 */ NULL,
|
|
/* State 10 */ aa_func10,
|
|
/* State 11 */ NULL,
|
|
/* State 12 */ aa_func12,
|
|
/* State 13 */ aa_func13
|
|
|
|
};
|
|
|
|
/* Keyword lookup table (.AND. and .OR. are not keywords) */
|
|
|
|
#define KWT_SIZE 8
|
|
|
|
char * kw_table[] = {
|
|
"ELSE",
|
|
"IF",
|
|
"INPUT",
|
|
"OUTPUT",
|
|
"PLATYPUS",
|
|
"REPEAT",
|
|
"THEN",
|
|
"USING"
|
|
};
|
|
|
|
#endif
|