[Aurelia-svn] SF.net SVN: aurelia:[107] trunk
Status: Alpha
Brought to you by:
valentindavid
|
From: <val...@us...> - 2010-07-26 17:17:38
|
Revision: 107
http://aurelia.svn.sourceforge.net/aurelia/?rev=107&view=rev
Author: valentindavid
Date: 2010-07-26 17:17:32 +0000 (Mon, 26 Jul 2010)
Log Message:
-----------
2010-07-26 Valentin David <val...@ii...>
* src/parser_generator/syntax.csf:
Filter symbol names. Fix layout lexical filtering code.
* src/parser_generator/parser_gen.cc:
Inject code from last labels.
* src/llstack/node.hh:
Fix graph dump.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/llstack/node.hh
trunk/src/parser_generator/parser_gen.cc
trunk/src/parser_generator/syntax.csf
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2010-07-26 16:20:16 UTC (rev 106)
+++ trunk/ChangeLog 2010-07-26 17:17:32 UTC (rev 107)
@@ -1,5 +1,16 @@
2010-07-26 Valentin David <val...@ii...>
+ * src/parser_generator/syntax.csf:
+ Filter symbol names. Fix layout lexical filtering code.
+
+ * src/parser_generator/parser_gen.cc:
+ Inject code from last labels.
+
+ * src/llstack/node.hh:
+ Fix graph dump.
+
+2010-07-26 Valentin David <val...@ii...>
+
* src/parser_generator/tests/gamma_2.cc,
* src/parser_generator/tests/Makefile.am,
* src/parser_generator/tests/gamma_2.csf,
Modified: trunk/src/llstack/node.hh
===================================================================
--- trunk/src/llstack/node.hh 2010-07-26 16:20:16 UTC (rev 106)
+++ trunk/src/llstack/node.hh 2010-07-26 17:17:32 UTC (rev 107)
@@ -224,9 +224,9 @@
while (i != super::objects().end()) {
super::RealObject* ro = const_cast<super::RealObject*>(&*i);
- o << "n_" << typeid((ro->data()->get_label())).name()
+ o << "n_" << ro->data()->get_label().hash()
<< "_" << ro->data()->get_pos() << " [label=\""
- << DEMANGLE(typeid((ro->data()->get_label())).name())
+ << ro->data()->get_label().hash()
<< ", " << ro->data()->get_pos() << "\"];" << std::endl;
++i;
@@ -237,9 +237,9 @@
for (node_core::node_set_t::const_iterator j =
ro->data()->get_parents().begin();
j != ro->data()->get_parents().end(); ++j) {
- o << "n_" <<typeid((ro->data()->get_label())).name()
+ o << "n_" << (ro->data()->get_label().hash())
<< "_" << ro->data()->get_pos() << " -> " << "n_"
- << typeid(((*j).get_label())).name() << "_"
+ << ((*j).get_label()).hash() << "_"
<< (*j).pos() << ";" << std::endl;
}
i++;
Modified: trunk/src/parser_generator/parser_gen.cc
===================================================================
--- trunk/src/parser_generator/parser_gen.cc 2010-07-26 16:20:16 UTC (rev 106)
+++ trunk/src/parser_generator/parser_gen.cc 2010-07-26 17:17:32 UTC (rev 107)
@@ -334,8 +334,28 @@
std::cout << "template <>" << std::endl;
std::cout << "struct branch<" << nt_name << ","
<< index << "," << s << "> {" << std::endl;
- std::cout << " typedef pop<branch<" << nt_name << ","
- << index << "," << s << "> > res;" << std::endl;
+ try {
+ V attrcode;
+ V params;
+ static C Some("Some", 1);
+ static C AttrRule("AttrRule", 2);
+
+ Some[AttrRule[params, attrcode]] = *attr;
+ std::cout << " struct res {" << std::endl;
+ std::cout << " void operator()(R_t& R, const frame& f, stream& s, const node& cu) const {" << std::endl;
+ std::cout << ((get_cons_name < undouble_quote)(*attrcode)) << std::endl;
+ std::cout << " pop<branch<" << nt_name << ","
+ << index << "," << s << "> > next;" << std::endl;
+ std::cout << " next(R, f, s, cu);" << std::endl;
+ std::cout << " }" << std::endl;
+ std::cout << " unsigned hash() const {" << std::endl;
+ std::cout << " return (unsigned)&typeid(res);" << std::endl;
+ std::cout << " }" << std::endl;
+ std::cout << " };" << std::endl;
+ } catch (Failure) {
+ std::cout << " typedef pop<branch<" << nt_name << ","
+ << index << "," << s << "> > res;" << std::endl;
+ }
std::cout << "};" << std::endl;
return t;
}
@@ -786,7 +806,7 @@
map_index(gen_branch(nt_name))(*l);
std::cout << "struct " << nt_name << " {" << std::endl;
std::cout << " enum { NT = NT_" << nt_name << " };" << std::endl;
- std::cout << " virtual void operator()(R_t& R, "
+ std::cout << " void operator()(R_t& R, "
<< "const frame& f, stream& s, const node& cu) const {"
<< std::endl;
int i = 0;
Modified: trunk/src/parser_generator/syntax.csf
===================================================================
--- trunk/src/parser_generator/syntax.csf 2010-07-26 16:20:16 UTC (rev 106)
+++ trunk/src/parser_generator/syntax.csf 2010-07-26 17:17:32 UTC (rev 107)
@@ -6,14 +6,15 @@
case '\n':
case '\t':
return ;
- case '/';
+ case '/':
+ {
buf_stream_iterator next = s;
++next;
if (!next.eof()) {
if (*next == '/')
return ;
}
- default:
+ }
}
}
$ |
@@ -24,14 +25,15 @@
case '\n':
case '\t':
return ;
- case '/';
+ case '/':
+ {
buf_stream_iterator next = s;
++next;
if (!next.eof()) {
if (*next == '/')
return ;
}
- default:
+ }
}
}
$
@@ -53,7 +55,22 @@
SymbolChar ::= [A-Z] | [a-z] | "*" | "?" | "+" | "-" | "_"
SymbolChar+ ::= SymbolChar SymbolChar*
SymbolChar* ::= SymbolChar+ |
- Symbol ::= SymbolChar+
+ Symbol ::= SymbolChar+ $
+ if (!s.eof()) {
+ switch (*s) {
+ case '*':
+ case '?':
+ case '+':
+ case '-':
+ case '_':
+ return ;
+ }
+ if (((*s) >= 'A') && (*s) <= 'Z')
+ return ;
+ if (((*s) >= 'a') && (*s) <= 'z')
+ return ;
+ }
+ $
StringChar ::= [^\"\\] | "\\" SpecialChar
StringChar+ ::= StringChar StringChar*
@@ -64,7 +81,7 @@
Symbol LAYOUT? ParameterList LAYOUT? RetType LAYOUT? "::=" LAYOUT? ListOfChains
S ::= LAYOUT? SS LAYOUT?
- SS ::= Rule SSS
+ SS ::= Rule LAYOUT? SSS
SSS ::= SS |
ParameterList ::= "(" LAYOUT? Parameters LAYOUT? ")" |
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|