上文展示了簡易計算器的詞法分析,獲得了表示式中的每個記號。本文繼續計算器的語法分析。
parser.h
#ifndef _parser_h
#define _parser_h
#include
#include
#include "lex.h"
#define line_buf_size (1024)
double parseline();
double parseexp();
#endif
parser.c
#include "parser.h"
static token stlookaheadtok;
static
int stlookaheadtokexist;
static
void mygettoken(token *tok)
else
}static
void ungettoken(token *tok)
static
double parseprimaryexp()
fprintf(stderr, "syntax error. \n");
exit(1);
return
}static
double parseterm()
v2 = parseprimaryexp();
if (tok.kind == token_op_mul) else
if (tok.kind == token_op_div)
}return v1;
}double parseexp()
v2 = parseterm();
if (tok.kind == token_op_add) else
if (tok.kind == token_op_sub) else
}return v1;
}double parseline()
加上上文的詞法分析code:
lex.h
#ifndef _lex_h
#define _lex_h
typedef enum tokenkind;
#define max_token_size (100)
typedef struct token;
void setline(char *file);
void gettoken(token *token);
#endif
lex.c
#include "lex.h"
#include
#include
#include
static
char *sline;
static
int slinepos;
typedef
enum lexerstatus;
void gettoken(token *token)
// skip space
if (isspace(currchar))
slinepos++;
continue;
}if (slinepos >= max_token_size - 1)
token->str[pos] = sline[slinepos];
slinepos++;
pos++;
token->str[pos] = '\0';
if (currchar == '+')
else
if (currchar == '-') else
if (currchar == '*') else
if (currchar == '/') else
if (isdigit(currchar)) else
if (st == dot_st)
} else
if (currchar == '.') else
} else
}}void setline(char *line)
// test code
// void parseline(char *buf)
// else
// }
// }
// int main(int argc, char **argv)
// // return 0;
// }
main.c
#include "parser.h"
int main(int argc, char **argv)
return
0;}
但不支援括號和負數。 Pascal 語法分析器 簡易實現
目錄前言 一 實現內容 二 實現準備 1.詞法分析器 2.自上而下的語法分析 理論 三 節選 四 測試截圖 此文僅筆者學習記錄,並不是多麼高深的東西,而且離完成也過了一段時間 不小心給忘了,汗 不過非常歡迎各種指導建議 pascal語言子集 pl 0 詞法分析器的設計與實現 pl 0語言的bnf描述...
編譯原理 簡單計算器 詞法分析 語法分析 含原始碼
參考文件 這個計算器原始碼我上傳到csdn上來,共享出來供有興趣的同學參考 之前大學的時候,編譯原理課程有乙個做計算器的任務,當時沒有做,只顧做乙個漂亮計算器介面。想來當時是買櫝還珠了,有點小遺憾,覺得編譯原理沒有實踐,沒有理解透徹。趁這週末有空,就把編譯器重新做一做,下面是做出來的效果 1.界定實...
08 使用vue實現簡易計算器
charset utf 8 meta 簡易計算器title src script head type text v model n1 v model opration value option value option value option value option select type te...