簡易計算器(2) 語法分析(不使用Yacc)

2021-08-04 07:55:31 字數 2512 閱讀 5231

上文展示了簡易計算器的詞法分析,獲得了表示式中的每個記號。本文繼續計算器的語法分析。

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...