lex相关内容
我正在尝试编写一个简单的 YAML 解析器,我从 yaml.org 阅读了规范,在开始之前,我想知道编写手动解析器是否更好,或者使用 lex (flex/bison).我查看了 libyaml (C 库) -似乎没有使用 lex/yacc.YAML(不包括流样式),似乎更面向行,所以,是吗更容易编写手动解析器,或使用 flex/bison谢谢. 解决方案 这个答案基本上是对以下问题的回答:
..
我正在为使用缩进等的相当复杂的配置文件编写解析器.我决定使用 Lex 将输入分解为标记,因为它似乎让生活更轻松.问题是我找不到任何使用 Qi 错误报告工具 (on_error) 和解析器的示例,这些解析器对令牌流而不是字符进行操作. 要在 on_error 中使用的错误处理程序需要一些时间才能准确指出错误在输入流中的位置.所有示例都只是从一对迭代器构造 std::string 并打印它们.但
..
人们可以向我指出有关使用 Python 进行词法分析、解析和标记的资源吗? 我正在对一个开源项目 (hotwire) 进行一些黑客攻击,并且想做对词法, 解析和标记输入的命令.因为它是真正的工作代码,所以相当复杂,而且有点难以计算. 我之前没有研究过 lex/parse/tokenise 的代码,所以我认为一种方法是在这方面完成一两个教程.我希望能学到足够的知识来浏览我真正想要改变的代
..
有哪些好的工具可以快速开始解析和分析 C/C++ 代码? 特别是,我正在寻找处理 C/C++ 预处理器和语言的开源工具.这些工具最好使用 lex/yacc(或 flex/bison)作为语法,不要太复杂.他们应该处理最新的 ANSI C/C++ 定义. 这是我目前发现的,但还没有详细研究它们(想法?): CScope - 老式 C 分析器.不过,似乎没有做完整的解析.被描述为用于
..
AST(抽象语法树)、解析树和派生树这些术语在提到解析符合语法的文本的结果时被不同的人使用.假设我们正在谈论解析计算机语言,它们的差异是否足够小以至于我们可以互换使用这些术语?如果不是,我们如何正确使用这些术语? 解决方案 AFAIK,“派生树"和“解析树"是一样的. 抽象语法树 在计算机科学中,抽象语法树 (AST),或简称为语法树,是用编程语言编写的源代码的抽象句法结构的树
..
我正在尝试为个人项目创建布尔表达式语言/语法.用户将能够用类似 Java 的语法编写一个字符串,并提供变量,这些变量将在稍后初始化变量时进行评估.雨例如,用户可能会输入字符串 @FOO+7 >4*(5+@BAR); 之后,当变量 FOO 被初始化并等于 6,而 BAR 等于 1 时,表达式的计算结果为 13>24,因此返回 false. 我正在使用 ANTLRworks 生成语法,虽然看
..
我有以下语法: 规则:'aaa' |'a' 'a'; 它可以成功解析字符串'aaa',但是解析'aa'失败,报错如下: line 1:2 不匹配的字符 ''期待 'a' 仅供参考,这是词法分析器的问题而不是解析器的问题,因为我什至不调用解析器.主要功能如下: @members {public static void main(String[] args) 抛出异常 {RecipeLexe
..
我正在使用 bison 和 flex,目前遇到了一些问题.当前读取第一个字符并将其传递给 Bison,但立即抛出 yyerror().它应该打印 1,因为 'w' 是由我的 Flex 规则定义的 Ident. 我无法确定问题的根源.我没有使用 Bison 的经验. 这是我的野牛解析规则: %%程序:StmtSeq {printf(“13");};StmtSeq : Stmt Stm
..
我希望输出为: a=3 mov a,3a=fs mov b,fsb=32 移动 b,32 3地址中间代码生成程序-为词法分析编写的 lex 文件从命令行读取输入并传递标记: %{#include "y.tab.h";#include "string.h";#include %}%%[a-zA-Z]+ { yylval.var=(char *)malloc(sizeof(char *));st
..
我有一个简单的模式来匹配:head+content+tail,我有一个像下面这样的 lex 文件: $ cat b.l%{#include%}%%"12" {printf("head\n");}"34" {printf("tail\n");}.* {printf("内容\n");}%% 我希望遇到“12"时会打印“head",遇到“34"时会打印“tail",任何其他连续的字符串都会打印“co
..
我有一个yacc/lex程序来处理这种行(在此示例中,它仅处理一种格式,但想法是显然它将处理更多格式): %cat test.csv20191201 170003296,1.102290,1.102470,020191201 170004413,1.102320,1.102470,020191201 170005270,1.102290,1.102470,020191201 170006063,
..
我想将这行解析为 20191201 170003296,1.102290,1.102470,0 为此,我编写了以下基本的yacc/lex语法/lexer: 语法.: %{#include#include%}%union {struct tm datetime;/*日期时间值*/double float_number;/* 8字节双值*/长整型数
..
我正在自学一些屈曲/野牛的乐趣.我正在为1975年版的MS Extended BASIC(扩展为“具有字符串")编写解释器.不过,我对一个问题感到有些困惑. 可以通过查找.或 E (等)来标识浮点数,然后将其故障转移到int.所以我做到了... [0-9] * [0-9.] [0-9] *([Ee] [-+]?[0-9] +)?{yylval.d = atof(yytext);返回FLOAT
..
完整示例如下: 将ply.lex导入为lex进口物业#令牌名称列表.这始终是必需的令牌= ["CheckupInformation",'介绍','信息','完美的','生病的','LPAREN','RPAREN','CHAR','数字']def t_CheckupInformation(t):"CheckupInformation";返回tdef t_Introduction(t):“简介";返
..
我在网站上有一个相关主题( $ cat b.l%{#include%}%%"12"表示{printf("head \ n");}"34"表示{printf("tail \ n");}.* {printf("content \ n");}%% 我想说的是,当遇到"12"时,打印"head";当遇到"34"时,打印“尾巴",否则打印“内容".对于不包含"12"的最长匹配或"
..
例如,如果使用 foo_SOURCES = bar.l 然后,自动制作通过弹性文件 bar.c 生成.但是,如果我提供前缀 AM_LFLAGS = -Psome_prefix ,则会生成 lex.some_prefix.c ,其他人不知道编译规则,因此它失败并显示 bar.c:没有这样的文件或目录.我的错误在哪里,我该如何解决?我真的需要前缀. 解决方案 我认为解决此问题的唯一
..
我有一个用C ++编写的flex程序,需要完成以下规则: 我希望yytext接受以下内容: ○零或以下字符之一ABCDEFGH 例如-输入: “三角形ABC"指的是“三角形ABC".是有效的形状,我希望程序打印“有效形状" “三角形AAC"指的是“三角形AAC".不是有效的形状,因为它包含双精度A,并且我希望程序在这种情况下不打印任何内容 “三角形ABCD"指的是“三角形ABC
..
我正在编写一个基本的解析器,该解析器读取stdin形式并将结果打印到stdout.问题是我在语法上遇到了麻烦: %token单词数字术语%%stmt:/*空*/|单词单词term {printf("[stmt] \ n");}|字号术语{printf("[stmt] \ n");}|字词|数字项;字词:WORD {printf("[word] \ n");};number:NUM {printf
..
这个问题类似于这个问题,但是对于yyparse而不是yylex. 我已经为此战斗了几个小时!我想从C程序调用yyparse(实际上是C ++,但是我最终还是使用旧的flex/bison而不是较新的C ++低音扬声器(甚至没有意识到C ++版本存在)).唯一的错误是在此范围内未声明'yyparse'.我尝试将变量定义为全局变量,但似乎不起作用. 在Flex文件中,我尝试过: 外部"C"
..
我有一个reEntrant解析器,该解析器从字符串中获取输入,并具有维护上下文的结构.使用要解析的不同输入字符串调用一个函数.该功能的相关代码为: void parseMyString(inputToBeParsed){//LEXLEX组件-启动LEX处理yyscan_t扫描仪;YY_BUFFER_STATE缓冲区;yylex_init_extra(& parseSupportStruct,&
..