備忘錄_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);
}