Laden...

Performancefrage: Tokengebundener Compiler

Erstellt von userid11997 vor 13 Jahren Letzter Beitrag vor 13 Jahren 614 Views
U
userid11997 Themenstarter:in
400 Beiträge seit 2008
vor 13 Jahren
Performancefrage: Tokengebundener Compiler

Moin,

ich arbeite gerade daran einen Compiler für einen beliebigen Sprachsatz zu entwerfen.
Die Syntax wird dabei durch ein in den Parser geladenes Pattern nach EBNF ISO-Norm vorgegeben und die eigentlichen Programmbefehle kommen aus einer dynamisch gebundenen DLL.

Nun habe ich einen Performancetest gemacht und bin für:

function();
if(b==1)
{
   i = 0;
   while(i<10)
   {
      function(1);
      add(i,1);
   }
}

mit einem Muster

--compiler

if = "if(" {(([{" "}] basic.comparsion) [({" "} (basic.logicalLink) {" "})])} ")" [{" "}] "{" [{" "}] {([{" "}] statement [{" "}])} [{" "}]"}";

while = "while(" {(([{" "}] basic.comparsion) [({" "} (basic.logicalLink) {" "})])} ")" [{" "}] "{" [{" "}] {([{" "}] statement [{" "}])} [{" "}]"}";

statement = ((basic.assignment|basic.function) ";") | (if|while);

whitespace = " ";

--basic

comparsion = (function|identifier|number|string) [{" "}] ("=="|"!="|">="|"<="|">"|"<") [{" "}] (function|identifier|number|string);

assignment = identifier [{" "}] "=" [{" "}] (function|identifier|number|string);

function = identifier [{" "}] "(" ({(identifier [","])|(number [","])|(string [","])}) ")";

identifier = char - numeral - " " { ( char - " "|numeral ) };

string = ("'" {char} "'")|('"' {char} '"');

number = ["-"] {numeral};

char = "a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|
       "i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|
       "q"|"r"|"s"|"t"|"u"|"v"|"w"|"x"|
       "y"|"z"|" "|numeral;

numeral = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|
          "8"|"9";

logicalLink = (([{" "}] "&&" [{" "}]) | ([{" "}] "||" [{" "}]));

auf etwa 4 ms für das Parsen anhand der Token in der Gruppe "compiler" gekommen.

Ist das verhältnismäßig gut oder eher noch verbesserungswürdig?

I
279 Beiträge seit 2008
vor 13 Jahren

Hi,

wie sollen wir das beurteilen?