草庐IT

编译原理:简单词法分析器的设计与实现

一、实验目的:设计、编制并调试一个简单的c语言词法分析程序,加深对词法分析原理的理解二、实验要求:对单词的构词规则有明确的定义;编写的分析程序能够正确识别源程序中的单词符号;识别出的单词以(单词符号,种别码)的形式保存在符号表中。三、实验内容:词法分析中的输入为一个C语言程序文件,该文件由如下关键字、运算符、界限符、常量、标识符中的符号构成,将该程序经词法分析后,形成的单词序列,并保存在一个文本文件(.txt)中。单词的种类及组成(1)关键字ifelsewhiledoformainreturnintfloatdoublechar所有的关键字都是小写。(2)运算符=+-*/%>=!===(3)界

html - 如何在 C 中有效地构建解释器(词法分析器+解析器)?

我正在尝试制作一种元语言,用于编写可以直接嵌入到C/C++代码中的标记代码(例如xml和html)。这是一个用这种语言编写的简单示例,我称之为WDI(Web开发接口(interface)):/**Simplewdi/htmlsamplesourcecode*/#includestringname="myName";stringtoCapital(stringstr);html{head{title{mySiteTitle;}link(rel="stylesheet",href="style.css");}body(id="default"){//Pagecontentwrapperdi

ios - Xcode 10 词法或预处理器问题 .h 文件未找到

在文件->工作区设置->新构建系统(默认)下使用新的Xcode10构建系统时,我的应用程序将无法编译,因为它找不到我在项目中使用的嵌入式.framework的.h文件.一旦我将构建系统设置为使用遗留构建系统,项目就可以完美构建。我如何使用新的构建系统并解决找不到.framework.h文件的问题?该项目在Xcode9.4.1中构建得非常好,没有问题,或者在Xcode10上使用遗留构建系统时。 最佳答案 我最终解决了这个问题。我最终要做的是定位->build设置并将框架搜索路径更改为绝对路径。在我更改之前它是~/Documents/F

c# - C# 是否有(直接)flex/yacc 端口?或者人们为 C# 使用什么词法分析器/解析器?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我可能是错的,但目前看来还没有适用于C#/.NET的直接flex/bison(lex/yacc)端口。对于LALR解析器,我找到了GPPG/GPLEX,对于LL解析器,有著名的ANTLR。但是,我想尽可能多地重用我的flex/bison语法。是否有用于C#的flex/bison的任何直接端口?人们通常为C#使用什么词法分析器/解析器?做出这样的选择有什么理

javascript - 如何使用回调函数在 TypeScript 中保留词法范围

我有一个TypeScript类,其中包含一个我打算用作回调的函数:removeRow(_this:MyClass):void{...//'this'isnowthewindowobject//Imustuse'_this'togettheclassitself...}我将它传递给另一个函数this.deleteRow(this.removeRow);它依次调用jQueryAjax方法,如果成功,它会像这样调用回调:deleteItem(removeRowCallback:(_this:MyClass)=>void):void{$.ajax(action,{data:{"id":id},

go - go语言有没有开源的词法分析器(解析器)?

对于go语言,有没有工具可以将其解析成词法元素?我正在寻找一个过滤器,它可以获取源代码并输出它的标记化版本。它不需要进行完整的语义编译。提前谢谢你, 最佳答案 标准库:https://golang.org/pkg/go/您可以从scanner开始包,它将标记化Go源代码。Example 关于go-go语言有没有开源的词法分析器(解析器)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

c++ - 如何将 flex 词法扫描器生成器用作程序的一部分?

如何使用我使用Flex编写的扫描仪作为我正在设计的程序的一部分?具体来说,在一个c++类中作为类的一个方法,并从一个单独的文件中只用一个main方法来执行测试。我不想使用%optionc++,但会用g++编译。为了回答如何从单独文件的主文件测试扫描仪的问题,我尝试使用以下代码:#include#include#includeusingnamespacestd;extern"C"{externintyylex();}externFILE*yyin;intmain(intargc,char*argv[]){if(argc>1)yyin=fopen(argv[1],"r");yylex();

php - 为什么我不能在 PHP 5.5.4 中将 $this 用作词法变量?

$php--versionPHP5.5.4(cli)(built:Sep19201317:10:06)Copyright(c)1997-2013ThePHPGroupZendEnginev2.5.0,Copyright(c)1998-2013ZendTechnologies以下代码(类似于https://bugs.php.net/bug.php?id=49543中的示例):classFoo{publicfunctionbar(){returnfunction()use($this){echo"inclosure\n";};}}失败:PHPFatalerror:Cannotuse$thi

c++ - 如何扩展词法转换以支持枚举类型?

我有以下函数可以将字符串转换为数字数据类型:templateboolConvertString(conststd::string&theString,T&theResult){std::istringstreamiss(theString);return!(iss>>theResult).fail();}但是,这不适用于枚举类型,所以我做了这样的事情:templateboolConvertStringToEnum(conststd::string&theString,T&theResult){std::istringstreamiss(theString);unsignedinttem

c# - 词法分析器和解析器之间的通信

每次我编写一个简单的词法分析器和解析器时,我都会偶然发现同一个问题:词法分析器和解析器应该如何通信?我看到了四种不同的方法:词法分析器急切地将整个输入字符串转换为标记vector。完成此操作后,将vector馈送到解析器,解析器将其转换为树。这是迄今为止实现的最简单的解决方案,但是由于所有token都存储在内存中,因此浪费了大量空间。每次词法分析器找到一个标记时,它都会调用解析器上的一个函数,并传递当前标记。以我的经验,这只有在解析器可以自然地实现为像LALR解析器这样的状态机时才有效。相比之下,我认为它根本不适用于递归下降解析器。每次解析器需要一个标记时,它都会向词法分析器询问下一个