備忘錄_20160105(定位)
修改
回首頁
程式 2019-06-20 09:35:28 1560994528 100
compiler 規劃,尚未完成,還有很長的路要走~~~
compiler 規劃,尚未完成,還有很長的路要走~~~
character 字元
token 標記
keyword / reserved word 關鍵字 / 保留字
identifier 識別子 -> symbol table 符號表
(symbol) operator 運算字 (+-*/......)
string
number
symbol 符號
expression 運算式
operand 運算元
<program> ::= <programHead> <block> <programTail>
<programHead> ::= 'prog' <identifier> '(' ')' '{'
<programTail> ::= '}'
<block> ::=
{ <subroutineDeclaration> }
| { <functionDeclaration> }
| <smallBlock>
<smallBlock> ::=
{ <variableDeclaration> }
| { <statement> }
<variableDeclaration> ::=
'string' <identifierList> ';'
| 'number' <identifierList> ';'
| 'boolean' <identifierList> ';'
<identifierList> ::= <identifier> { ',' <identifier> }
<parameterList> ::= ('string' | 'number' | 'boolean') <identifier> { ',' ('string' | 'number' | 'boolean') <identifier> }
<subroutineDeclaration> ::= 'void' <identifier> '(' [ <parameterList> ] ')' '{' <smallBlock> '}'
<functionDeclaration> ::= ('string' | 'number' | 'boolean') <identifier> '(' [ <parameterList> ] ')' '{' <smallBlock> '}'
<statement> ::=
<assignmentStatement>
| <callStatement>
| <ifStatement>
| <whileStatement>
| <writeStatement>
<assignmentStatement> ::= <identifier> '=' <expression> ';'
<callStatement> ::= <identifier> '(' [ <itemList> ] ')' ';'
<itemList> ::= (<identifier> | <string> | <number> | <expression> | <boolean>) { ',' (<identifier> | <string> | <number> | <expression> | <boolean>) }
function 要放入 expression 中嗎?
prog 小小語言()
{
number n1, n2, n3;
string str1, str2, str3;
boolean boo1;
number numPlus(number 數字1, number 數字2)
{
return 數字1+數字2;
}
n1=12;
n2=38.88;
n3=n1+n2;
if(n3==numPlus(n1,n2)) { boo1=true; }
else { boo1=false; }
str1="n1+n2 ?= numPlus(n1,n2) ==> ";
str2="false";
if(boo1==true) { str2="true"; }
str3=strConcat(str1, str2);
writeNumber(n1);
writeNumber(n2);
writeNumber(n3);
writeString(str3);
}