summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--lib/sitecing_parser.ll159
1 files changed, 81 insertions, 78 deletions
diff --git a/lib/sitecing_parser.ll b/lib/sitecing_parser.ll
index 8ba8673..9514ce4 100644
--- a/lib/sitecing_parser.ll
+++ b/lib/sitecing_parser.ll
@@ -144,34 +144,34 @@ NOIDCHAR [^A-Za-z0-9_]
anchor();
}
}
<METHODLINE>{
{WHITESPACE}+ {
- modus_operandi& m = modi.front();
- if(!m.output.empty()) {
- if(!m._lastid.empty()) {
- if(!m._type.empty()) m._type += ' ';
- m._type += m._lastid;
- }
- m._lastid = m.output;
- m.output.clear();
- }
- }
+ modus_operandi& m = M();
+ if(!m.output.empty()) {
+ if(!m._lastid.empty()) {
+ if(!m._type.empty()) m._type += ' ';
+ m._type += m._lastid;
+ }
+ m._lastid = m.output;
+ m.output.clear();
+ }
+ }
\* {
- modus_operandi& m = modi.front();
- ECHO;
- if(!m._lastid.empty()) {
- if(!m._type.empty()) m._type += ' ';
- m._type += m._lastid;
- }
- m._lastid = m.output;
- m.output.clear();
- }
+ modus_operandi& m = M();
+ ECHO;
+ if(!m._lastid.empty()) {
+ if(!m._type.empty()) m._type += ' ';
+ m._type += m._lastid;
+ }
+ m._lastid = m.output;
+ m.output.clear();
+ }
\( {
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
if(m.output.empty()) {
m._name=m._lastid;
}else{
if(!m._lastid.empty()) { // XXX: lastid, I believe should never be emtpy...
if(!m._type.empty()) m._type += ' ';
m._type += m._lastid;
@@ -182,13 +182,13 @@ NOIDCHAR [^A-Za-z0-9_]
ECHO;
BEGIN(METHODARGS);
}
}
<METHODARGS>{
\%\> {
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
m._args = m.output;
m.output.clear();
anchor();
BEGIN(METHODBLOCK);
}
}
@@ -220,34 +220,34 @@ NOIDCHAR [^A-Za-z0-9_]
<INLINE>\%\> LexerOutput(")",1); M().modus=modus_operandi::modus_preop; yy_pop_state();
<CODELINE>\n yy_pop_state();
<CODEMETHODLINE>{
{WHITESPACE}+ {
- modus_operandi& m = modi.front();
- if(!m.output.empty()) {
- if(!m._lastid.empty()) {
- if(!m._type.empty()) m._type += ' ';
- m._type += m._lastid;
- }
- m._lastid = m.output;
- m.output.clear();
- }
- }
+ modus_operandi& m = M();
+ if(!m.output.empty()) {
+ if(!m._lastid.empty()) {
+ if(!m._type.empty()) m._type += ' ';
+ m._type += m._lastid;
+ }
+ m._lastid = m.output;
+ m.output.clear();
+ }
+ }
\* {
- modus_operandi& m = modi.front();
- ECHO;
- if(!m._lastid.empty()) {
- if(!m._type.empty()) m._type += ' ';
- m._type += m._lastid;
- }
- m._lastid = m.output;
- m.output.clear();
- }
+ modus_operandi& m = M();
+ ECHO;
+ if(!m._lastid.empty()) {
+ if(!m._type.empty()) m._type += ' ';
+ m._type += m._lastid;
+ }
+ m._lastid = m.output;
+ m.output.clear();
+ }
\( {
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
if(m.output.empty()) {
m._name=m._lastid;
}else{
if(!m._lastid.empty()) { // XXX: lastid, I believe should never be emtpy...
if(!m._type.empty()) m._type += ' ';
m._type += m._lastid;
@@ -258,30 +258,31 @@ NOIDCHAR [^A-Za-z0-9_]
ECHO;
BEGIN(CODEMETHODARGS);
}
}
<CODEMETHODARGS>{
\%\> {
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
m._args = m.output;
m.output.clear();
m.flags=0;
anchor();
BEGIN(CODEMETHODBLOCK);
}
}
<IMPORTLINE>{
{WHITESPACE}+ { }
{ID} {
- if(!modi.front()._name.empty())
- throw preprocessor_error(CODEPOINT,"syntax error",lineno());
- modi.front()._name = yytext;
- }
+ modus_operandi& m = M();
+ if(!m._name.empty())
+ throw preprocessor_error(CODEPOINT,"syntax error",lineno());
+ m._name = yytext;
+ }
\= {
- modi.front().output.clear();
+ M().output.clear();
BEGIN(IMPORTCOMPONENT);
}
}
<IMPORTCOMPONENT>{
{WHITESPACE}+ { }
\n {
@@ -303,18 +304,19 @@ NOIDCHAR [^A-Za-z0-9_]
}
}
<IMPORTTYPELINE>{
{WHITESPACE}+ { }
{ID} {
- if(!modi.front()._name.empty())
- throw preprocessor_error(CODEPOINT,"syntax error",lineno());
- modi.front()._name = yytext;
- }
+ modus_operandi& m = M();
+ if(!m._name.empty())
+ throw preprocessor_error(CODEPOINT,"syntax error",lineno());
+ m._name = yytext;
+ }
\= {
- modi.front().output.clear();
+ M().output.clear();
BEGIN(IMPORTTYPECOMPONENT);
}
}
<IMPORTTYPECOMPONENT>{
{WHITESPACE}+ { }
\n {
@@ -336,18 +338,19 @@ NOIDCHAR [^A-Za-z0-9_]
}
}
<DERIVELINE>{
{WHITESPACE}+ { }
{ID} {
- if(!modi.front()._name.empty())
- throw preprocessor_error(CODEPOINT,"syntax_error",lineno());
- modi.front()._name = yytext;
- }
+ modus_operandi& m = M();
+ if(!m._name.empty())
+ throw preprocessor_error(CODEPOINT,"syntax_error",lineno());
+ m._name = yytext;
+ }
\= {
- modi.front().output.clear();
+ M().output.clear();
BEGIN(DERIVECOMPONENT);
}
}
<DERIVECOMPONENT>{
{WHITESPACE}+ { }
\n {
@@ -368,34 +371,34 @@ NOIDCHAR [^A-Za-z0-9_]
BEGIN(INITIAL);
}
}
<VARLINE>{
{WHITESPACE}+ {
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
if(!m.output.empty()) {
if(!m._lastid.empty()) {
if(!m._type.empty()) m._type += ' ';
m._type += m._lastid;
}
m._lastid = m.output;
m.output.clear();
}
}
\* {
- modus_operandi& m = modi.front();
- ECHO;
- if(!m._lastid.empty()) {
- if(!m._type.empty()) m._type += ' ';
- m._type += m._lastid;
- }
- m._lastid = m.output;
- m.output.clear();
- }
+ modus_operandi& m = M();
+ ECHO;
+ if(!m._lastid.empty()) {
+ if(!m._type.empty()) m._type += ' ';
+ m._type += m._lastid;
+ }
+ m._lastid = m.output;
+ m.output.clear();
+ }
\;|\n|\= {
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
if(m.output.empty()) {
m._name=m._lastid;
}else{
if(!m._lastid.empty()) { // XXX: lastid should never be emtpy, I believe?
if(!m._type.empty()) m._type += ' ';
m._type += m._lastid;
@@ -407,13 +410,13 @@ NOIDCHAR [^A-Za-z0-9_]
if(*yytext!='=')
unput('\n');
}
}
<VARINIT>{
\n {
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
string::size_type t = m.output.find_first_not_of(" \t");
if(t!=string::npos)
m.output.erase(0,t);
t = m.output.find_last_not_of(" \t;");
if(t!=string::npos)
m.output.erase(t+1);
@@ -423,24 +426,24 @@ NOIDCHAR [^A-Za-z0-9_]
modi.pop_front();
BEGIN(INITIAL);
}
}
<DECLLINE>\n {
ECHO;
- decl += modi.front().output;
+ decl += M().output;
modi.pop_front();
BEGIN(INITIAL);
}
<IMPLLINE>\n {
ECHO;
- impl += modi.front().output;
+ impl += M().output;
modi.pop_front();
BEGIN(INITIAL);
}
<CLASSLINE>\n {
- class_name = modi.front().output;
+ class_name = M().output;
modi.pop_front();
BEGIN(INITIAL);
}
<CLASSLINE,DECLLINE,IMPLLINE,VARLINE,VARINIT,IMPORTLINE,IMPORTCOMPONENT,CODEMETHODLINE,CODEMETHODARGS,INLINE,METHODLINE,METHODARGS,DECLBLOCK,IMPLBLOCK,CONSTRUCTOR,DESTRUCTOR,CODEMETHODBLOCK,CODELINE,CODEBLOCK,PRAGMALINE>{
"/*" {
yy_push_state(SLASHSTAR_COMMENT);
@@ -474,45 +477,45 @@ NOIDCHAR [^A-Za-z0-9_]
{WHITESPACE}+ soft_anchor(); M().modify(modus_operandi::modus_text); ECHO;
}
<DECLBLOCK,IMPLBLOCK,CONSTRUCTOR,DESTRUCTOR,CODEMETHODBLOCK,METHODBLOCK,CODEBLOCK>{
\<\/\%decl\> {
if(YY_START!=DECLBLOCK) throw preprocessor_error(CODEPOINT,"tags mismatch",lineno());
- decl += modi.front().output;
+ decl += M().output;
modi.pop_front();
BEGIN(INITIAL);
}
\<\/\%impl\> {
if(YY_START!=IMPLBLOCK) throw preprocessor_error(CODEPOINT,"tags mismatch",lineno());
- impl += modi.front().output;
+ impl += M().output;
modi.pop_front();
BEGIN(INITIAL);
}
\<\/\%constructor\> {
if(YY_START!=CONSTRUCTOR) throw preprocessor_error(CODEPOINT,"tags mismatch",lineno());
- member_functions.push_back(member_function("","","",modi.front().output));
+ member_functions.push_back(member_function("","","",M().output));
have_constructor = true;
modi.pop_front();
BEGIN(INITIAL);
}
\<\/\%destructor\> {
if(YY_START!=DESTRUCTOR) throw preprocessor_error(CODEPOINT,"tags mismatch",lineno());
- member_functions.push_back(member_function("","~","",modi.front().output));
+ member_functions.push_back(member_function("","~","",M().output));
modi.pop_front();
BEGIN(INITIAL);
}
\<\/\%codemethod\> {
if(YY_START!=CODEMETHODBLOCK) throw preprocessor_error(CODEPOINT,"tags mismatch",lineno());
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
member_functions.push_back(member_function(m._type,m._name,m._args,m.output));
modi.pop_front();
BEGIN(INITIAL);
}
\<\/%method\> {
if(YY_START!=METHODBLOCK) throw preprocessor_error(CODEPOINT,"tags mismatch",lineno());
- modus_operandi& m = modi.front();
+ modus_operandi& m = M();
m.modify(modus_operandi::modus_code);
member_functions.push_back(member_function(m._type,m._name,m._args,m.output));
modi.pop_front();
BEGIN(INITIAL);
}
\<\/%code\> {