- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在学习如何使用 Lex & Bison 进行编程。我写了下面的程序,但它的递归性和错误恢复似乎有很大的问题。它总是在打印第一个错误后停止。我读过有关 yyerrok 和 yyclearin 的资料,但我无法让它发挥作用。任何帮助或与某些教程的一些链接将不胜感激。
cmp.y:
%{
#include <stdio.h> /* C declarations used in actions */
#include <stdlib.h>
#include <string.h>
char *variables[1000];
char *var_type[1000];
extern int yylineno;
extern FILE* yyin;
//penistern char* yytpenist;
void yyerror(char *s);
void symbols(char *string);
void get_type(char *string);
void check_type(char* string_1,char* string_2, char* opt);
void is_declared(char* string);
%}
%union {char* var; char* type;}
%token <type> INT DOUBLE BOOL CHAR
%token FOR WHILE VOID
%token IF ELSE PRINTF CONTINUE BREAK RETURN
%token STRUCT BYREF
%token NUM
%token INCLUDE
%token DELETE NEW TRUE FALSE NULLV
%token ADD_ASSIGN SUB_ASSIGN MUL_ASSIGN DIV_ASSIGN MOD_ASSIGN
%token INC_OP DEC_OP AND_OP OR_OP LE_OP GE_OP EQ_OP NE_OP
%token DOT
%token <var> ID
%right '='
%left AND OR
%left '<' '>' INC_OP DEC_OP AND_OP OR_OP LE_OP GE_OP EQ_OP NE_OP
%error-verbose
%debug
%%
program
: declaration
| declaration program
;
declaration
: declaration_variable ';'
| declaration_function ';'
| function
| error '\n' {yyerrok;}
;
identf
: ID '[' statheri_expr ']'
| ID
;
declaration_function
: type ID '(' parameter_list ')' ';'
| type ID '(' ')' ';'
;
/*tipos_apotelesmatos
: type
| VOID
;*/
parameter_list
: parameter_list ',' parameter
| parameter
;
parameter
: BYREF type ID
| type ID
;
function
: type ID '(' parameter_list ')' '{' stmt '}'
| type ID '(' parameter_list ')' '{' '}'
| type ID '(' ')' '{' '}'
| type ID '(' ')' '{' stmt '}'
| type ID '(' ')' '{' declaration '}'
//|error { yyerrok; yyclearin;}
;
stmt
: FOR '(' expr ';' expr ';' expr ')' stmt
| FOR '(' expr ';' expr ';' ')' stmt
| FOR '(' expr ';' ')' stmt
| IF '(' expr ')'
//| stmt '{' expr_list '}'
| '{' expr_list '}'
| '{' stmt '}'
| '{' '}'
| CONTINUE ID ';'
| CONTINUE ';'
| BREAK ID ';'
| BREAK ';'
| RETURN expr
| RETURN ';'
| expr ';'
|';'
;
expr
: '(' type ')' expr
| ID'?' expr ':' expr
| ID diadikos_telestis_anathesis expr
| ID monadiaios_telestis expr
| ID monadiaios_telestis_anathesis ';'
| ID diadikos_telestis expr
| ID '(' expr_list ')'
| '(' expr ')'
| '(' expr_list ')'
| '[' expr ']'
//| NEW type '[' expr ']'
| NEW type
| DELETE expr
| TRUE
| FALSE
| NULLV
| NUM
| ID
;
expr_list
: expr
| expr_list ',' expr
;
statheri_expr
: expr
;
declaration_variable
: type identf
| declaration_variable ',' identf
;
type
: basic_type '*'
| basic_type
;
basic_type
: INT
| CHAR
| BOOL
| DOUBLE
| VOID
;
monadiaios_telestis
: '&'
| '*'
| '+'
| '-'
| '!'
;
monadiaios_telestis_anathesis
: INC_OP //++
| DEC_OP //--
;
diadikos_telestis_anathesis
: '='
| MUL_ASSIGN//'*='
| DIV_ASSIGN//'/='
| MOD_ASSIGN //%=
| ADD_ASSIGN//'+='
| SUB_ASSIGN//'-='
;
diadikos_telestis
: '/'
| '%'
| '<'
| '>'
| LE_OP//'<='
| GE_OP//'>='
| EQ_OP//'=='
| NE_OP//'!='
| AND_OP//'&&'
| OR_OP//'||'
;
%%
cmp.l:
alpha [a-zA-Z]
digit [0-9]
%{
#include "y.tab.h"
#include <stdio.h>
extern void yyerror(const char *); /* prints grammar violation message */
static void comment(void);
%}
%option nodefault yylineno
%%
"/*" { comment(); }
"//".* { /* consume //-comment */ }
[\t\n]+ {;}
"int" {yylval.type = strdup(yytext); return INT;}
"char" {yylval.type = strdup(yytext); return CHAR;}
"bool" {yylval.type = strdup(yytext); return BOOL;}
"void" {yylval.type = strdup(yytext); return VOID;}
"double" {yylval.type = strdup(yytext); return DOUBLE;}
"new" {return NEW;}
"continue" {return CONTINUE;}
"delete" {return DELETE;}
"true" {return TRUE;}
"false" {return FALSE;}
"null" {return NULLV;}
"return" {return RETURN;}
"for" {return FOR;}
"while" {return WHILE;}
"if" {return IF;}
"else" {return ELSE;}
"printf" {return PRINTF;}
"struct" {return STRUCT;}
"byref" {return BYREF;}
"+=" {return(ADD_ASSIGN); }
"-=" {return(SUB_ASSIGN); }
"*=" {return(MUL_ASSIGN); }
"/=" {return(DIV_ASSIGN); }
"%=" {return(MOD_ASSIGN); }
"++" {return(INC_OP); }
"--" {return(DEC_OP); }
"&&" {return(AND_OP); }
"||" {return(OR_OP); }
"<=" {return(LE_OP); }
">=" {return(GE_OP); }
"==" {return(EQ_OP); }
"!=" {return(NE_OP); }
"&" {return('&'); }
"!" {return('!'); }
"~" {return('~'); }
"-" {return('-'); }
"+" {return('+'); }
"*" {return('*'); }
"/" {return('/'); }
"%" {return('%'); }
"<" {return('<'); }
">" {return('>'); }
"^" {return('^'); }
"|" {return('|'); }
"?" {return('?'); }
^"#include ".+ {;}
{digit}+ {return NUM;}
{alpha}({alpha}|{digit})* {yylval.var = strdup(yytext);return ID;}
";" {return ';'; }
"." {return DOT;}
\/\/.* {;}
\/\*(.*\n)*.*\*\/ {;}
[ \t\r\n]+ {;}
. {return *yytext;}
%%
int yywrap (void) {return 1;}
static void comment(void)
{
int c;
while ((c = input()) != 0)
if (c == '*')
{
while ((c = input()) == '*')
;
if (c == '/')
return;
if (c == 0)
break;
}
yyerror("Unterminated comment");
}
最佳答案
您的 flex 文件会忽略换行符,并且您的错误生成会跳过标记,直到它收到换行符。由于解析器永远不会收到换行符,错误恢复机制将丢弃所有其余的输入。
关于c - 解析编译器语法和错误错误恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045672/
我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。 尽管知道我的数据库查
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在尝试运行 Android 应用程序时遇到问题并收到以下错误 java.lang.NoClassDefFoundError: com.parse.Parse 当我尝试运行该应用时。 最佳答案 在这
有什么办法可以防止etree在解析HTML内容时解析HTML实体吗? html = etree.HTML('&') html.find('.//body').text 这给了我 '&' 但我想
我有一个有点疯狂的例子,但对于那些 JavaScript 函数作用域专家来说,它看起来是一个很好的练习: (function (global) { // our module number one
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短的描述,就像您链接到 Facebook 上的内容一样。 当用户向站点添加链接时将调用它,因此在客户端启动
在 VS Code 中本地开发时,包解析为 C:/Users//AppData/Local/Microsoft/TypeScript/3.5/node_modules/@types//index而不是
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我被赋予了将一种语言“翻译”成另一种语言的工作。对于使用正则表达式的简单逐行方法来说,源代码过于灵活(复杂)。我在哪里可以了解更多关于词法分析和解析器的信息? 最佳答案 如果你想对这个主题产生“情绪化
您好,我在解析此文本时遇到问题 { { { {[system1];1;1;0.612509325}; {[system2];1;
我正在为 adobe after effects 在 extendscript 中编写一些代码,最终变成了 javascript。 我有一个数组,我想只搜索单词“assemble”并返回整个 jc3_
我有这段代码: $(document).ready(function() { // }); 问题:FB_RequireFeatures block 外部的代码先于其内部的代码执行。因此 who
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些
1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 X
【PHP代码】 复制代码 代码如下: $stmt = mssql_init('P__Global_Test', $conn) or die("initialize sto
在SQL查询分析器执行以下代码就可以了。 复制代码代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor curs
前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习🤭 题目 题目一: 二维数组中的
我是一名优秀的程序员,十分优秀!