So schreiben Sie einen einfachen Interpreter mit PHP

不言
Freigeben: 2023-04-03 06:16:01
Original
2299 Leute haben es durchsucht

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);
Nach dem Login kopieren

So schreiben Sie einen einfachen Interpreter mit PHP

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!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage