153 lines
2.4 KiB
Plaintext
153 lines
2.4 KiB
Plaintext
%{
|
|
/* This file is part of the software similarity tester SIM.
|
|
Written by Dick Grune, Vrije Universiteit, Amsterdam.
|
|
$Id: miralang.l,v 1.13 2017-03-19 09:23:20 dick Exp $
|
|
*/
|
|
|
|
/*
|
|
Miranda language front end for the similarity tester.
|
|
Author: Emma Norling (ejn@cs.mu.oz.au)
|
|
Date: Nov 1998
|
|
*/
|
|
|
|
#include "token.h"
|
|
#include "language.h"
|
|
#include "algollike.h"
|
|
#include "lex.h"
|
|
#include "lang.h"
|
|
|
|
/* General language front end data */
|
|
Token lex_token;
|
|
size_t lex_nl_cnt;
|
|
size_t lex_tk_cnt;
|
|
size_t lex_non_ascii_cnt;
|
|
|
|
/* Language-dependent data */
|
|
#include "idf.h"
|
|
|
|
static const struct idf reserved[] = {
|
|
{"abstype", NORM('a')},
|
|
{"bool", NORM('b')},
|
|
{"char", NORM('c')},
|
|
{"const", META('c')},
|
|
{"div", NORM('d')},
|
|
{"False", NORM('F')},
|
|
{"if", NORM('i')},
|
|
{"mod", NORM('m')},
|
|
{"num", NORM('n')},
|
|
{"otherwise", NORM('o')},
|
|
{"readvals", NORM('r')},
|
|
{"show", NORM('s')},
|
|
{"sys_message", META('s')},
|
|
{"True", NORM('T')},
|
|
{"type", NORM('t')},
|
|
{"where", NORM('w')},
|
|
{"with", META('w')}
|
|
};
|
|
|
|
/* Token sets for module algollike */
|
|
const Token Non_Finals[] = {
|
|
NORM('('),
|
|
NORM('['),
|
|
NORM('='),
|
|
No_Token
|
|
};
|
|
const Token Non_Initials[] = {
|
|
NORM(')'),
|
|
NORM(']'),
|
|
No_Token
|
|
};
|
|
const Token Openers[] = {
|
|
NORM('('),
|
|
NORM('['),
|
|
NORM('='),
|
|
No_Token
|
|
};
|
|
const Token Closers[] = {
|
|
NORM(')'),
|
|
NORM(']'),
|
|
No_Token
|
|
};
|
|
|
|
/* Language-dependent code */
|
|
|
|
const char *Subject = "Miranda programs";
|
|
|
|
void
|
|
Init_Language(void) {
|
|
Init_Algol_Language(Non_Finals, Non_Initials, Openers, Closers);
|
|
}
|
|
|
|
|
|
int
|
|
May_Be_Start_Of_Run(Token ch) {
|
|
return May_Be_Start_Of_Algol_Run(ch);
|
|
}
|
|
|
|
size_t
|
|
Best_Run_Size(const Token *str, size_t size) {
|
|
return Best_Algol_Run_Size(str, size);
|
|
}
|
|
|
|
%}
|
|
|
|
%option noyywrap
|
|
|
|
%Start Comment
|
|
|
|
Layout ([ \t\r\f])
|
|
ASCII95 ([\040-\176])
|
|
|
|
AnyQuoted (\\.)
|
|
StrChar ([^\"\n\\]|{AnyQuoted})
|
|
ChrChar ([^\'\\]|{AnyQuoted})
|
|
|
|
Idf ([A-Za-z][A-Za-z0-9_\']*)
|
|
|
|
%%
|
|
|
|
"||".*$ { /* comment */
|
|
}
|
|
|
|
\"{StrChar}*\" { /* strings */
|
|
return_ch('"');
|
|
}
|
|
|
|
\'{ChrChar}\' { /* characters */
|
|
return_ch('\'');
|
|
}
|
|
|
|
\%{Layout}*include.* { /* skip %include line */
|
|
}
|
|
|
|
\%{Layout}*insert.* { /* skip %insert line */
|
|
}
|
|
|
|
{Idf} { /* identifier */
|
|
return_tk(idf_in_list(yytext, reserved, sizeof reserved, IDF));
|
|
}
|
|
|
|
\n { /* count newlines */
|
|
return_eol();
|
|
}
|
|
|
|
{Layout} { /* ignore layout */
|
|
}
|
|
|
|
{ASCII95} { /* copy other text */
|
|
return_ch(yytext[0]);
|
|
}
|
|
|
|
. { /* count non-ASCII chars */
|
|
lex_non_ascii_cnt++;
|
|
}
|
|
|
|
%%
|
|
|
|
/* More language-dependent code */
|
|
|
|
void
|
|
yystart(void) {
|
|
BEGIN INITIAL;
|
|
}
|