source: trunk/src/easymesh/easymesh-scanner.l @ 2410

Last change on this file since 2410 was 2410, checked in by touky, 7 years ago

easymesh : Added SmoothMesh operation, works well with triangle, not well with a box.

File size: 5.0 KB
Line 
1%{
2//
3// Lol Engine
4//
5// Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
6//            (c) 2009-2013 Cédric Lecacheur <jordx@free.fr>
7//            (c) 2009-2013 Benjamin "Touky" Huet <huet.benjamin@gmail.com>
8//   This program is free software; you can redistribute it and/or
9//   modify it under the terms of the Do What The Fuck You Want To
10//   Public License, Version 2, as published by Sam Hocevar. See
11//   http://www.wtfpl.net/ for more details.
12//
13
14#if defined HAVE_CONFIG_H
15#   include "config.h"
16#endif
17
18#include <cstdlib>
19using std::exit;
20using std::malloc;
21using std::realloc;
22using std::free;
23
24#include "core.h"
25#include "easymesh/easymesh-compiler.h"
26
27typedef lol::EasyMeshParser::token token;
28typedef lol::EasyMeshParser::token_type token_type;
29
30#ifndef YY_DECL
31#   define YY_DECL lol::EasyMeshParser::token_type \
32        lol::EasyMeshScanner::lex(lol::EasyMeshParser::semantic_type* yylval, \
33                                  lol::EasyMeshParser::location_type* yylloc)
34#endif
35
36#define yyterminate() return token::T_END
37#define YY_NO_UNISTD_H
38#define YY_USER_ACTION yylloc->columns(yyleng);
39%}
40
41%option c++ prefix="EasyMesh"
42%option batch yywrap nounput stack
43
44%%
45
46%{
47    /* reset location at the beginning of yylex() */
48    yylloc->step();
49%}
50
51sc    { return token::T_COLOR; }
52scb   { return token::T_BGCOLOR; }
53
54ch    { return token::T_CHAMFER; }
55tx    { return token::T_TRANSLATEX; }
56ty    { return token::T_TRANSLATEY; }
57tz    { return token::T_TRANSLATEZ; }
58t     { return token::T_TRANSLATE; }
59rx    { return token::T_ROTATEX; }
60ry    { return token::T_ROTATEY; }
61rz    { return token::T_ROTATEZ; }
62tax   { return token::T_TAPERX; }
63tay   { return token::T_TAPERY; }
64taz   { return token::T_TAPERZ; }
65twx   { return token::T_TWISTX; }
66twy   { return token::T_TWISTY; }
67twz   { return token::T_TWISTZ; }
68shx   { return token::T_SHEARX; }
69shy   { return token::T_SHEARY; }
70shz   { return token::T_SHEARZ; }
71stx   { return token::T_STRETCHX; }
72sty   { return token::T_STRETCHY; }
73stz   { return token::T_STRETCHZ; }
74bdxy  { return token::T_BENDXY; }
75bdxz  { return token::T_BENDXZ; }
76bdyx  { return token::T_BENDYX; }
77bdyz  { return token::T_BENDYZ; }
78bdzx  { return token::T_BENDZX; }
79bdzy  { return token::T_BENDZY; }
80sx    { return token::T_SCALEX; }
81sy    { return token::T_SCALEY; }
82sz    { return token::T_SCALEZ; }
83s     { return token::T_SCALE; }
84tsw   { return token::T_TOGGLESCALEWINDING; }
85mx    { return token::T_MIRRORX; }
86my    { return token::T_MIRRORY; }
87mz    { return token::T_MIRRORZ; }
88rj    { return token::T_RADIALJITTER; }
89splt  { return token::T_SPLITTRIANGLE; }
90smth  { return token::T_SMOOTHMESH; }
91
92csgu  { return token::T_CSGUNION; }
93csgs  { return token::T_CSGSUBSTRACT; }
94csgsl { return token::T_CSGSUBSTRACTLOSS; }
95csga  { return token::T_CSGAND; }
96csgx  { return token::T_CSGXOR; }
97
98ab    { return token::T_BOX; }
99ac    { return token::T_CYLINDER; }
100acap  { return token::T_CAPSULE; }
101acg   { return token::T_COG; }
102ad    { return token::T_DISC; }
103aes   { return token::T_EXPANDEDSTAR; }
104afcb  { return token::T_FLATCHAMFBOX; }
105aq    { return token::T_QUAD; }
106as    { return token::T_STAR; }
107ascb  { return token::T_SMOOTHCHAMFBOX; }
108asph  { return token::T_SPHERE; }
109at    { return token::T_TRIANGLE; }
110ato   { return token::T_TORUS; }
111
112#[0-9a-fA-F]{3} {
113        uint32_t tmp = std::strtol(yytext + 1, NULL, 16);
114        yylval->u32val = 0x11000000u * (tmp >> 8)
115                       | 0x00110000u * ((tmp >> 4) & 0xf)
116                       | 0x00001100u * (tmp & 0xf)
117                       | 0x000000ffu;
118        return token::COLOR; }
119#[0-9a-fA-F]{4} {
120        uint32_t tmp = std::strtol(yytext + 1, NULL, 16);
121        yylval->u32val = 0x11000000u * (tmp >> 12)
122                       | 0x00110000u * ((tmp >> 8) & 0xf)
123                       | 0x00001100u * ((tmp >> 4) & 0xf)
124                       | 0x00000011u * (tmp & 0xf);
125        return token::COLOR; }
126#[0-9a-fA-F]{6} {
127        yylval->u32val = 0xffu
128                       | 0x100u * (uint32_t)std::strtol(yytext + 1, NULL, 16);
129        return token::COLOR; }
130#[0-9a-fA-F]{8} {
131        yylval->u32val = (uint32_t)std::strtol(yytext + 1, NULL, 16);
132        return token::COLOR; }
133[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? {
134        yylval->fval = std::atof(yytext); return token::NUMBER; }
135-     { return token_type('-'); }
136"["   { return token_type('['); }
137"]"   { return token_type(']'); }
138[ ,]  { /* ignore this */ }
139[\n]  { /* ignore this */ }
140.     { return token::T_ERROR; }
141
142%%
143
144lol::EasyMeshScanner::EasyMeshScanner(char const *command)
145    : EasyMeshFlexLexer(0, 0),
146      m_input(command)
147{
148}
149
150lol::EasyMeshScanner::~EasyMeshScanner()
151{
152}
153
154int lol::EasyMeshScanner::LexerInput(char* buf, int max_size)
155{
156    (void)max_size; /* unused for now */
157
158    buf[0] = m_input[0];
159    if (buf[0])
160        ++m_input;
161    return buf[0] ? 1 : 0;
162}
163
164#ifdef yylex
165#undef yylex
166#endif
167int EasyMeshFlexLexer::yylex()
168{
169    std::cerr << "in EasyMeshFlexLexer::yylex() !" << std::endl;
170    return 0;
171}
172
173int EasyMeshFlexLexer::yywrap()
174{
175    return 1;
176}
177
Note: See TracBrowser for help on using the repository browser.