1
/* Copyright (C) 1995 Bjoern Beutel. */
3
/* Description. =============================================================*/
5
/* This program takes a rule file and compiles it to an intermediate code
8
/* Includes. ================================================================*/
23
#include "rule_type.h"
24
#include "rule_code.h"
25
#include "rule_compiler.h"
29
/* Functions. ===============================================================*/
32
main( int argc, char *argv[] )
33
/* The main function of "malrul". */
35
string_t rule_file, object_file, symbol_file;
36
int_t file_type = 0, i;
38
init_basic( "malrul" );
41
if (strcmp_no_case( argv[1], "--version" ) == 0
42
|| strcmp_no_case( argv[1], "-version" ) == 0
43
|| strcmp_no_case( argv[1], "-v" ) == 0)
48
else if (strcmp_no_case( argv[1], "--help" ) == 0
49
|| strcmp_no_case( argv[1], "-help" ) == 0
50
|| strcmp_no_case( argv[1], "-h" ) == 0)
52
printf( "Compile a rule file of a Malaga grammar.\n\n"
54
"malrul SYM_FILE RULE_FILE "
55
"-- Compile RULE_FILE using SYM_FILE.\n"
57
"-- Print version information.\n"
59
"-- Print this help.\n\n"
60
"SYM_FILE may end on \".sym\" or \".esym\".\n"
61
"RULE_FILE may end on \".all\", \".mor\", or \".syn\".\n" );
65
rule_file = object_file = symbol_file = NULL;
66
for (i = 1; i < argc; i++)
68
if (has_extension( argv[i], "all" ))
70
set_file_name( &rule_file, argv[i] );
71
set_binary_file_name( &object_file, argv[i] );
72
file_type = ALLO_RULE_FILE;
74
else if (has_extension( argv[i], "mor" ))
76
set_file_name( &rule_file, argv[i] );
77
set_binary_file_name( &object_file, argv[i] );
78
file_type = MORPHO_RULE_FILE;
80
else if (has_extension( argv[i], "syn" ))
82
set_file_name( &rule_file, argv[i] );
83
set_binary_file_name( &object_file, argv[i] );
84
file_type = SYNTAX_RULE_FILE;
86
else if (has_extension( argv[i], "sym" ))
87
set_binary_file_name( &symbol_file, argv[i] );
88
else if (has_extension( argv[i], "esym" ))
89
set_binary_file_name( &symbol_file, argv[i] );
91
complain( "Illegal argument \"%s\".", argv[i] );
93
if (object_file == NULL)
94
complain( "No file to compile." );
95
if (symbol_file == NULL)
96
complain( "Missing symbol file name." );
99
init_symbols( symbol_file );
103
compile_rule_file( rule_file, object_file, file_type );
109
terminate_patterns();
110
free_mem( &symbol_file );
112
free_mem( &object_file );
113
free_mem( &rule_file );
119
/* End of file. =============================================================*/