diff options
| author | Shinya Sato <shinnya.sato@gmail.com> | 2021-11-02 16:05:52 +0900 |
|---|---|---|
| committer | Shinya Sato <shinnya.sato@gmail.com> | 2021-11-02 16:05:52 +0900 |
| commit | 0df7f6fa71cea5de0e041df80854d307930e418d (patch) | |
| tree | 229c696c48e97c14b44eb85b7d4057de8867f2f7 /src/inpla.l | |
| parent | a2aabb706c95bc7189633f6efef8325428d09630 (diff) | |
| download | inpla-0df7f6fa71cea5de0e041df80854d307930e418d.tar.gz inpla-0df7f6fa71cea5de0e041df80854d307930e418d.zip | |
v0.5.1
Diffstat (limited to 'src/inpla.l')
| -rw-r--r-- | src/inpla.l | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/src/inpla.l b/src/inpla.l deleted file mode 100644 index 85bf522..0000000 --- a/src/inpla.l +++ /dev/null @@ -1,193 +0,0 @@ -%{ -#include <stdio.h> -#include <stdlib.h> -#include "linenoise/linenoise.h" - -#undef YY_INPUT -#define YY_INPUT(buf,result,max_size) result = mygetinput(buf, max_size); - -static int mygetinput(char *buf, int size) { - char *line; - if (feof(yyin)) return YY_NULL; - - if (yyin!=stdin) { - int len; - char ch; - for (len = 0; len < size; len++) { - ch = getc(yyin); - if (ch == EOF) - break; - buf[len] = ch; - } - return len; - } - - linenoiseSetMultiLine(1); - if (yylineno == 1) { - line = linenoise(">>> "); - } else { - line = linenoise("... "); - } - if(!line) return YY_NULL; - if(strlen(line) > size-2){ - fprintf(stderr,"input line too long\n"); - return YY_NULL; - } - sprintf(buf, "%s\n", line); - linenoiseHistoryAdd(line); - linenoiseHistorySave(".inpla.history.txt"); - free(line); - return strlen(buf); -} - - -//#undef YY_INPUT -//#define YYINPUT(buf, result, max_size) result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); - - -/************************************ - Strings -*************************************/ -#define MAX_STRING_LENGTH 1024 -static char ParseStringBuffer[MAX_STRING_LENGTH]; -static int nextPtr_ParseStringBuffer = 0; -void Parse_StringBuffer_reInit() { - nextPtr_ParseStringBuffer = 0; -} - -void Parse_addString(char ch) { - ParseStringBuffer[nextPtr_ParseStringBuffer] = ch; - nextPtr_ParseStringBuffer++; -} - -char *Parse_closeStringBuffer() { - char *ret; - ParseStringBuffer[nextPtr_ParseStringBuffer]='\0'; - ret = ParseStringBuffer; - return ret; -} - - - -%} - -%option nounput -%option yylineno -%option noyywrap -%x STRING_STATE COM_STATE -%% -<INITIAL>";" return (DELIMITER); -<INITIAL>":" return (COLON); -<INITIAL>"(" return (LP); -<INITIAL>")" return (RP); -<INITIAL>"{" return LC; -<INITIAL>"}" return RC; -<INITIAL>"[" return LB; -<INITIAL>"]" return RB; -<INITIAL>"," return (COMMA); -<INITIAL>"><" return (CROSS); -<INITIAL>"=>" return (TO); -<INITIAL>"~" return (CNCT); -<INITIAL>"-" return (SUB); -<INITIAL>"|" return(PIPE); -<INITIAL>"&" return(AMP); -<INITIAL>"=" return(LD); -<INITIAL>"==" return(EQUAL); -<INITIAL>"!=" return(NE); -<INITIAL>">" return(GT); -<INITIAL>">=" return(GE); -<INITIAL>"<" return(LT); -<INITIAL>"<=" return(LE); -<INITIAL>"+" return (ADD); -<INITIAL>"*" return (MUL); -<INITIAL>"/" return (DIV); -<INITIAL>"%" return (MOD); -<INITIAL>"_" return (ANY); -<INITIAL>"<<" return (ABR); - -<INITIAL>"int" return(INT); - -<INITIAL>"let" return(LET); -<INITIAL>"in" return(IN); -<INITIAL>"end" return(END); - -<INITIAL>"where" return(WHERE); - -<INITIAL>"if" return(IF); -<INITIAL>"then" return(THEN); -<INITIAL>"else" return(ELSE); - -<INITIAL>"interface" return(INTERFACE); -<INITIAL>"ifce" return(IFCE); - -<INITIAL>"prnat" return(PRNAT); -<INITIAL>"free" return(FREE); -<INITIAL>"exit" return(EXIT); - -<INITIAL>"rand" return(RAND); - -<INITIAL>"const" return(DEF); - -<INITIAL>"use" return(USE); - -<INITIAL>"*L" return(ANNOTATE_L); -<INITIAL>"*R" return(ANNOTATE_R); -<INITIAL>[a-z][a-zA-Z0-9_'\.]* { yylval.chval = strdup(yytext); - return (NAME);} -<INITIAL>[A-Z][a-zA-Z0-9_'\.]* { yylval.chval = strdup(yytext); - return (AGENT);} -<INITIAL>[0-9]+ { yylval.intval = atoi(yytext); - return (INT_LITERAL);} - -<INITIAL>"//"[^\n]* ; //comment -<INITIAL>"/*" BEGIN(COM_STATE); -<COM_STATE>. ; -<COM_STATE>\n ; -<COM_STATE>"*/" BEGIN INITIAL; //comment - -<INITIAL>\r\n ; -<INITIAL>[\n|\r] ; -<INITIAL>[ \t]+ ; -<INITIAL><<EOF>> {return END_OF_FILE;} -<INITIAL>\" { - Parse_StringBuffer_reInit(); - BEGIN STRING_STATE; -} - -<INITIAL>. {return yytext[0];} - - - - -<STRING_STATE>\" { - yylval.chval = strdup(Parse_closeStringBuffer()); - BEGIN INITIAL; - return STRING_LITERAL; -} -<STRING_STATE>\n { -// Parse_addString('\n'); -yyerror("Unterminated string"); -BEGIN(INITIAL); -return DELIMITER; -} -<STRING_STATE>\\\" Parse_addString('"'); -<STRING_STATE>\\n Parse_addString('\n'); -<STRING_STATE>\\t Parse_addString('\t'); -<STRING_STATE>\\\\ Parse_addString('\\'); -<STRING_STATE>. Parse_addString(yytext[0]); -%% - -void pushFP(FILE *fp) { - yypush_buffer_state(yy_create_buffer(fp, YY_BUF_SIZE)); -} - -int popFP() { - yypop_buffer_state(); - if (! YY_CURRENT_BUFFER ) { - yyterminate(); - return 0; - } - return 1; -} - - |
