我正在尝试解析以下几行:
BEGIN WRAP WIO3
NAME lgCell_prg160_io
CONDITION UNI_PLACE_GLOBAL && compBits
ENDS WIO3
Run Code Online (Sandbox Code Playgroud)
我用来解析上面几行的语法正在解析直到UNI_PLACE_GLOBAL然后它给出解析错误。
请帮助我找出我所犯的错误。
我认为它不接受空格,所以我怎样才能允许解析这些行?
我已经做好了
莱克斯.l
%{
#include <iostream>
#include <stdio.h>
const char s[2] = " ";
#include "yacca.tab.h"
char *token;
#define YY_DECL extern "C" int yylex()
int line_num = 1;
#ifdef DEBUG
#define RETURN(x) cerr << "\n--> found " << #x << "\n"; return x;
#else
#define RETURN(x) return x;
#endif
using namespace std;
%}
DOT "."
COLON ":"
SEMICOLON ";"
COMMA ","
ANGLE_LEFT "<"
ANGLE_RIGHT …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个小型编译器,它可以解析我输入的一些命令。
我尝试解析的命令是:
create class something = create class do_something ;
Run Code Online (Sandbox Code Playgroud)
我的代码将是这样的:
grammar : my_grammar
{
list<Class1 *> *obj = new list<Class1 *>;
obj->push_back($1);
}
my_grammar : my_definition SEMICOLON
{
report("something detected!");
$$ = $1;
}
my_definition : CREATE CLASS class_name EQU class_expression
{
$5->setClassName(*$3);
$$ = $5;
}
class_expression : CREATE CLASS operand_name
{
$$ = new OperandClass();
$$->setOperationType("createClass");
$$->setOperandName(*$3);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在其他地方调用解析器时,我无法获取Class之前定义的解析器。
我猜解析器肯定有问题,并用GDB做了一些调试。但我就是无法进入该功能push_back(),也无法正确打印信息obj。
所以,我想知道是否有一种方法可以在使用 GDB 时获取$$or的值$1。只需输入p $$即可打印其他内容。