我正在尝试构建一个Lisp语法.容易,对吗?显然不是.
我提出这些输入并收到错误......
( 1 1)
23 23 23
ui ui
Run Code Online (Sandbox Code Playgroud)
这是语法......
%%
sexpr: atom {printf("matched sexpr\n");}
| list
;
list: '(' members ')' {printf("matched list\n");}
| '('')' {printf("matched empty list\n");}
;
members: sexpr {printf("members 1\n");}
| sexpr members {printf("members 2\n");}
;
atom: ID {printf("ID\n");}
| NUM {printf("NUM\n");}
| STR {printf("STR\n");}
;
%%
Run Code Online (Sandbox Code Playgroud)
就像我所知,我需要一个非终端定义为一个程序,整个解析树可以挂起.但我尝试了它似乎没有用.
编辑 - 这是我的"顶级终端"方法:
program: slist;
slist: slist sexpr | sexpr;
Run Code Online (Sandbox Code Playgroud)
但它允许以下问题:
( 1 1
Run Code Online (Sandbox Code Playgroud)
Edit2:FLEX代码是......
%{
#include <stdio.h>
#include "a.yacc.tab.h"
int linenumber;
extern int yylval;
%}
%% …Run Code Online (Sandbox Code Playgroud)