📄 calclex.l
字号:
/* Lexical analyzer for calc program.Copyright 2000, 2001 Free Software Foundation, Inc.This file is part of the GNU MP Library.This program is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the Free SoftwareFoundation; either version 2 of the License, or (at your option) any laterversion.This program is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR APARTICULAR PURPOSE. See the GNU General Public License for more details.You should have received a copy of the GNU General Public License along withthis program; if not, write to the Free Software Foundation, Inc., 59 TemplePlace - Suite 330, Boston, MA 02111-1307, USA. */%{#include "calc-common.h"#if WITH_READLINE/* Let GNU flex use readline. See the calcread.c redefined input() for a way that might work for a standard lex too. */#define YY_INPUT(buf,result,max_size) \ result = calc_input (buf, max_size);#endif/* Non-zero when reading the second or subsequent line of an expression, used to give a different prompt when using readline. */int calc_more_input = 0;const struct calc_keywords_t calc_keywords[] = { { "abs", ABS }, { "bin", BIN }, { "decimal", DECIMAL }, { "fib", FIB }, { "hex", HEX }, { "help", HELP }, { "gcd", GCD }, { "kron", KRON }, { "lcm", LCM }, { "lucnum", LUCNUM }, { "nextprime", NEXTPRIME }, { "powm", POWM }, { "quit", QUIT }, { "root", ROOT }, { "sqrt", SQRT }, { NULL }};%}%%[ \t\f] { /* white space is skipped */ }[;\n] { /* semicolon or newline separates statements */ calc_more_input = 0; return EOS; }\\\n { /* escaped newlines are skipped */ }#(([^\\\n]*)\\)+\n { /* comment through to escaped newline is skipped */ }#[^\n]*\n { /* comment through to newline is a separator */ calc_more_input = 0; return EOS; }#[^\n]* { /* comment through to EOF skipped */ }[-+*/%()<>^!=,] { return yytext[0]; }"<=" { return LE; }">=" { return GE; }"==" { return EQ; }"!=" { return NE; }"<<" { return LSHIFT; }">>" { return RSHIFT; }"&&" { return LAND; }"||" { return LOR; }(0[xX])?[0-9A-F]+ { yylval.str = yytext; return NUMBER; }[a-zA-Z][a-zA-Z0-9]* { int i; for (i = 0; calc_keywords[i].name != NULL; i++) if (strcmp (yytext, calc_keywords[i].name) == 0) return calc_keywords[i].value; if (yytext[0] >= 'a' && yytext[0] <= 'z' && yytext[1] == '\0') { yylval.var = yytext[0] - 'a'; return VARIABLE; } return BAD;}. { return BAD; }%%intyywrap (){ return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -