Dieser Artikel stellt hauptsächlich vor, wie man mit PHP einen einfachen Interpreter schreibt. Er hat einen gewissen Referenzwert. Jetzt kann ich ihn mit allen teilen, die ihn brauchen.
Zufälligerweise habe ich ihn gefunden Im Freundeskreis fand ich jemanden, der das Buch „Two Weeks of Self-made Scripting Language“ las, und dachte, es wäre gut, eine Skriptsprache zu schreiben, damit ich die Sprache selbst besser verstehen kann. Also kaufte ich es und schaute es mir an. Der Text war ziemlich einfach zu verstehen, aber der Nachteil war, dass die verwendete Sprache Java war. Warum Java verwenden?
Ich habe in den letzten Tagen auch online nach einigen Informationen gesucht und diese für gut befunden. https://github.com/rspivak/ls..., aber auch dieses Tutorial verwendet kein PHP. Wie der Autor sagte, liegt es an Ihnen, die Sprache zu wählen, und der Dolmetscher ist nicht auf Sprachmerkmale angewiesen.
Also habe ich Teil 1 in PHP neu geschrieben und in den nächsten Tagen werde ich alle Teile in PHP neu schreiben.
Schreiben Sie den Code hier, um Ihre eigene Suche zu erleichtern, und ich hoffe auch, dass einige Freunde, die sich für den Dolmetscher interessieren, gemeinsam lernen können.
<?php class Token{ private $type; private $value; public function __construct($type,$value) { $this->type=$type; $this->value=$value; } public function __get($name) { return $this->{$name}; } public function __toString() { return 'type:'.$this->type.' value:'.$this->value; } } class Interpreter{ private $current_char ; private $current_token ; private $text; private $pos=0; public function __construct($text){ $this->text=trim($text); } public function error() { throw('Error parsing input'); } public function get_next_token() { $text=$this->text; if ($this->pos > strlen($text)-1){ return new Token('EOF', null); } $this->current_char = $text[$this->pos]; if (is_numeric($this->current_char)){ $token=new Token('INTEGER',intval($this->current_char)); $this->pos++; return $token; } if ($this->current_char=="+"){ $token = new Token('PLUS', $this->current_char); $this->pos ++; return $token; } $this->error(); } public function eat($token_type) { if ($this->current_token->type==$token_type){ $this->current_token=$this->get_next_token(); }else{ $this->error(); } } public function expr() { $this->current_token=$this->get_next_token(); $left=$this->current_token; $this->eat('INTEGER'); $op=$this->current_token; $this->eat('PLUS'); $right=$this->current_token; $this->eat('INTEGER'); $result=$left->value+$right->value; return $result; } } do{ fwrite(STDOUT,'xav>');; $input=fgets(STDIN); $Interpreter=new Interpreter($input); echo $Interpreter->expr(); unset($Interpreter); }while(true);
Unterstützt derzeit nur die Addition einstelliger Ganzzahlen
Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, er wird für alle hilfreich sein Lernen, weitere verwandte Inhalte Bitte achten Sie auf die chinesische PHP-Website!
Verwandte Empfehlungen:
Einführung in thinkphp3.2.3 zur Verwendung von think-phpunit für Unit-Tests
Das obige ist der detaillierte Inhalt vonSo schreiben Sie einen einfachen Interpreter mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!