1.Einleitung

1.1 Der Überblick über Compiler

1.1.1 Lexikalische Analyse

Die lexikalische Analyse zerteilt den eingelesenen Quelltext in lexikalische Einheiten (Tokens) verschiedener Typen, zum Beispiel Schlüsselwörter, Bezeichner, Zahlen, Zeichenketten oder Operatoren. Dieser Teil des Compilers heißt Scanner oder Lexer.

1.1.2 Syntaktische Analyse

Die syntaktische Analyse überprüft, ob der eingelesene Quellcode in einer korrekten Struktur der zu übersetzenden Quellsprache vorliegt, das heißt der kontextfreien Syntax (Grammatik) der Quellsprache entspricht

1.1.3 Semantische Analyse

Die semantische Analyse überprüft die statische Semantik, also über die syntaktische Analyse hinausgehende Bedingungen an das Programm.

Verschiedene Phase der Compiler:

Eine Übersetzung des Satzes:

1.1.4 Interpreter

Ein Interpreter ist ein Computerprogramm, das einen Programm-Quellcode im Gegensatz zu Assemblern oder Compilern nicht in eine auf dem System direkt ausführbare Datei übersetzt, sondern den Quellcode einliest, analysiert und ausführt.

1.1.5 Compiler

Ein Compiler ist ein Computerprogramm, das Quellcodes einer bestimmten Programmiersprache in eine Form übersetzt, die von einem Computer (direkter) ausgeführt werden kann.

2.Lexikalische Analyse

2.1 Kette und Sprache

Kette:Die Kette in Alphabet ist endliche Sequenz der Alphabetstabelle

Sprache:Eine Ketteliste der Alphabet

2.2 Regulärer Ausdruck

Regulärer Ausdruck:Ein regulärer Ausdruck ist in der theoretischen Informatik eine Zeichenkette, die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.

Regulärer Liste:ist eine Sprache,die mit regulärer Ausdruck ausdrucken kann.

Priorität der Rechnung:Closure>Verbindung>Auswahl

2.3 Die Definition der Regulärer Ausdruck

Man kann regulärer Ausdruck bennen und mit diese Name entsprechende regulärer Ausdruck zitieren.

Die Difinition der Regulärer Ausdruck:

Form wie

d1->r1

d2->r2

···

dn->rn

Zum Beispieil:

letter_->[A-Za-z_]

digit->0|1|···|9

id->letter_(letter_|digit)*

number->digit+(.digit+)?(E(+/-)?digit+)?

2.4 Nichtdeterministischer endlicher Automat

Ein nichtdeterministischer endlicher Automat (NEA; englisch nondeterministic finite automatonNFA) ist ein endlicher Automat, bei dem es für den Zustandsübergang mehrere gleichwertige Möglichkeiten gibt. Im Unterschied zum deterministischen endlichen Automaten sind die Möglichkeiten nicht eindeutig, dem Automaten ist also nicht vorgegeben, welchen Übergang er zu wählen hat.

2.5 Deterministischer endlicher Automat

Ein deterministischer endlicher Automat (DEA; englisch deterministic finite automatonDFA) ist ein endlicher Automat, der unter Eingabe eines Zeichens seines Eingabealphabetes (den möglichen Eingaben) von einem Zustand, in dem er sich befindet, in einen eindeutig bestimmten Folgezustand wechselt. Er unterscheidet sich darin von nichtdeterministischen endlichen Automaten, deren Zustandswechsel sich nicht immer deterministisch ereignen müssen.

2.5.1 Die Umsetzung von NFA nach DFA

Beispiel 1:Bildst du fur (a|b)*a(a|b) DFA

Zuerst zeichnen wir NFA

Bilden wir einen Dtran,gesamt vier verschiedene Liste

Abgrund des Dtrans zeichnen wir die Abbildung der DFA

Beispiel2:DFA,Die Binarzahl,die in {0,1} mit 5 Division ohne Rest machen kann,kann erkannt werden.

3.Syntaktische Analyse

3.1 Die Definition der Kontextfreie Grammatik

Normalerweise gesagt,G ist ein vierTuple(VT,VN,S,P),darunter:

(1)VT ist eine nicht leer und endliche Menge,deren Element wird als Terminalsymbol bezeichnet

(2)VN ist eine nicht leer und endliche Menge,deren Element wird als Nichtterminalsymbol bezeichnet

(3)S ist eine NichtTerminalsymbol,bezeichnen wir Startsymbol

(4)P ist eine Menge von Produktion

3.2 Folgendes Zeichen wird als Terminalsymbol/Nichtterminalsymbol  benutzt

3.3 Die Zwei Bedeutung der Grammatik

Aufgrund der Grammatiks E->E+E|E*E|(E)|-E|id

3.4 Beseitigen Linke Rekursion

Es besteht A=>Aα,bezeichnen wir diese Grammatik Linke Rekursion

Linke Rekursion A->Aα|β kann mit nicht Linke Rekursion

A->βA'

A'->αA'

ersetzen

3.5 LL(1) Grammatik

3.5.1 Die Definition der LL(1)

3.5.2 Berechnen First Menge

Methode:Berechnen wir Grammatik Symbolzeichenfolge,die Produktion der Terminalsymbol enthält,dann erhalten wir linken Seite der Produktion

Beispiel:FIRST(E) = FIRST(T) = FIRST(F) = {(,id}   (Die Produktion müssen Terminalsymbol haben)

FIRST(E') = {+,ε}  (Die Grammatik hier enthält Terminalsymbol,unnötig nach unten zu berechnen)

FIRST(T') = {*,ε} (gleich wie oben)

3.5.3 Berechnen Follow Menge

Methode:

berechnen wir der Rechte Seite des X,den Follow(X) Menge umfassen;

Vorhergehend Grammatik Symbolzeichenfolgen sitzen in dem Produktion der Follow;

Falls die Rechte Seite der X kein Terminalsymbol hat,fügen First Menge der Rechten Seite der X hinein;

Beispiel:FOLLOW(E) = FOLLOW(E') = {),$} (haben kein Verhältnis zu E',schauen wir der rechten Seite der Produktion der E,Ergebnis ist ')',legen es und '$' in Follow Menge)

FOLLOW(T) = FOLLOW(T') = {+,),$} (Weil First(E') ε und + umfasst,ε wird defalut beseitigt, legen '+' in Follow(E))

FOLLOW(F) = {+,*,),$}  (Die rechte Seite der F hat kein Terminalsymbol F,fügen First(T') Follow(T) hinein)

Compiler Principle的更多相关文章

  1. APS审核经验+审核资料汇总——计算机科学与技术专业上海德语审核

    1.APS是什么 德国驻华使馆文化处留德人员审核部(简称APS)成立于2001年7月,是由德国驻华使馆文化处和德意志学术交流中心(DAAD)在北京共同合作成立的服务机构. APS是中国学生前往德国留学 ...

  2. The IDL compiler

    The IDL compiler or bindings generator transcompiles Web IDL to C++ code, specifically bindings betw ...

  3. Java compiler level does not match解决方法

    从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description  Resource Path Location Type Java compiler level d ...

  4. idea报错:error java compilation failed internal java compiler error

    idea下面报如下问题 error java compilation failed internal java compiler error 解决办法:Setting->Compiler-> ...

  5. 使用Google Closure Compiler高级压缩Javascript代码注意的几个地方

    介绍 GCC(Google Closure Compiler)是由谷歌发布的Js代码压缩编译工具.它可以做到分析Js的代码,移除不需要的代码(dead code),并且去重写它,最后再进行压缩. 三种 ...

  6. SSE指令集学习:Compiler Intrinsic

    大多数的函数是在库中,Intrinsic Function却内嵌在编译器中(built in to the compiler). 1. Intrinsic Function Intrinsic Fun ...

  7. c++ builder 2010 错误 F1004 Internal compiler error at 0x9740d99 with base 0x9

    今天遇到一个奇怪的问题,拷贝项目后,在修改,会出现F1004 Internal compiler error at 0x9740d99 with base 0x9 ,不管怎么改,删除改动,都没用,关闭 ...

  8. Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法

    今天在导入工程进Eclipse的时候竟然出错了,控制台输出的是: [2013-02-04 22:17:13 - takepicture] Android requires compiler compl ...

  9. Compiler Error Message: CS0016: Could not write to output file 回绝访问

    Compiler Error Message: CS0016: Could not write to output file 'c:\Windows...dll' 拒绝访问 C:\Windows\Te ...

随机推荐

  1. asp.net——正则表达式

    在平时的开发中常常用到替换法:  普通的字符串替换可以使用string.replace(string,string),但是比较难解决HTML文本的替换. 经我几番查找,终也找出解决办法:正则匹配替换. ...

  2. 函数IsValid()

    功能:检查对象变量是否已经实例化,即实例变量的值是否是个有效的对象句柄. 语法:IsValid(objectname) 参数:objectname:要检查的对象名. 返回值:Boolean.如果指定对 ...

  3. java学习笔记—Servlet技术(11)

    如果大家要开发一个动态的网站,那么就必须要学习一种动态的网页开发技术.那么在SUN提供的JavaEE中主要包含两种开发动态网页的技术:Servlet和JSP技术. Servlet技术简介 Servle ...

  4. aspx代码审计-1

    今天和大家分享一下aspx网站的代码审计,漏洞类型就是SQL注入和cookie欺骗. 本文作者:i春秋签约作家——非主流 今天看的cms名字叫做:XX星员工请假系统 我们首先看一下网站的目录结构: 其 ...

  5. python 爬虫 黑科技

    1.最基本的抓站 import urllib2 content = urllib2.urlopen('http://XXXX').read() 2.使用代理服务器 这在某些情况下比较有用,比如IP被封 ...

  6. leetcode-79-单词搜索(用dfs解决)

    题目描述: 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许 ...

  7. 42.oracle物化视图

    写在前面 先大概列一下数据库表设计的常规流程.方案.要遵循的规则 根据业务切分设计表 逻辑分层(数据库分层) 数据库结构设计与拆分:水平拆分(mysql分片)oracle分区物化视图中间表设计方案 优 ...

  8. 2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III

    1119 AlvinZH's Fight with DDLs III 思路 难题,最小点覆盖. 分析题意,某一个任务,既可以在笔记本A的 \(a\) 模式下完成,也可以在笔记本B的 \(b\) 模式下 ...

  9. 2016级算法期末上机-C.简单·Bamboo's Fight with DDLs III

    简单·Bamboo's Fight with DDLs III 分析 一句话:贪心,简单哈夫曼应用,要求的其实是所有结点的值与权值的乘积之和,也就是带权路径长. 可以理解为非叶子节点的权值的和,这里的 ...

  10. QuantLib 金融计算——基本组件之 DateGeneration 类

    目录 QuantLib 金融计算--基本组件之 DateGeneration 类 QuantLib 金融计算--基本组件之 DateGeneration 类 许多产品的估值依赖于对未来现金流的分析,因 ...