当前位置: 首页 > news >正文

大连网站建设制作个人网站服务器

大连网站建设制作,个人网站服务器,银川做网站的公司,网站规划与站点的建立实训报告antlr idea 入门这是该系列的第一篇文章。 本系列的目的是描述如何创建有用的语言和所有支持工具。 在本文中#xff0c;我们将开始研究一种非常简单的表达语言。 我们将在语言沙箱中构建它#xff0c;因此我们将其称为语言Sandy 。 我认为工具支持对于一种语言至关重要我们将开始研究一种非常简单的表达语言。 我们将在语言沙箱中构建它因此我们将其称为语言Sandy 。 我认为工具支持对于一种语言至关重要因此我们将从一种非常简单的语言开始但是我们将为此提供丰富的工具支持。 要从一种语言中受益我们需要解析器解释器和编译器编辑器等。 在我看来构建简单的解析器的材料很多但是构建使用语言的实用和有效所需的其余基础结构的材料却很少。 我想专注于这些方面使语言小巧但完全有用。 然后您将能够有机地增长语言。 该代码可在GitHub上找到 https : //github.com/ftomassetti/LangSandbox 。 本文中提供的代码对应于标签01_lexer。 语言 该语言将允许定义变量和表达式。 我们将支持 整数和十进制文字 变量定义和赋值 基本数学运算加减乘除 括号的用法 有效文件的示例 var a 10 / 3 var b (5 3) * 2 var c a / b我们将使用的工具 我们将使用 ANTLR生成词法分析器和解析器 使用Gradle作为我们的构建系统 用Kotlin编写代码。 鉴于我刚开始学习它这将是非常基本的Kotlin。 设置项目 我们的构建。 gradle文件将如下所示 buildscript {ext.kotlin_version 1.0.3repositories {mavenCentral()maven {name JFrog OSS snapshot repourl https://oss.jfrog.org/oss-snapshot-local/}jcenter()}dependencies {classpath org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version} }apply plugin: kotlin apply plugin: java apply plugin: idea apply plugin: antlrrepositories {mavenLocal()mavenCentral()jcenter() }dependencies {antlr org.antlr:antlr4:4.5.1compile org.antlr:antlr4-runtime:4.5.1compile org.jetbrains.kotlin:kotlin-stdlib:$kotlin_versioncompile org.jetbrains.kotlin:kotlin-reflect:$kotlin_versiontestCompile org.jetbrains.kotlin:kotlin-test:$kotlin_versiontestCompile org.jetbrains.kotlin:kotlin-test-junit:$kotlin_versiontestCompile junit:junit:4.12 }generateGrammarSource {maxHeapSize 64marguments [-package, me.tomassetti.langsandbox]outputDirectory new File(generated-src/antlr/main/me/tomassetti/langsandbox.toString()) } compileJava.dependsOn generateGrammarSource sourceSets {generated {java.srcDir generated-src/antlr/main/} } compileJava.source sourceSets.generated.java, sourceSets.main.javaclean{delete generated-src }idea {module {sourceDirs file(generated-src/antlr/main)} } 我们可以运行 ./gradlew想法来生成IDEA项目文件 ./gradlew generateGrammarSource生成ANTLR词法分析器和解析器 实施词法分析器 我们将在两个单独的文件中构建词法分析器和解析器。 这是词法分析器 lexer grammar SandyLexer;// Whitespace NEWLINE : \r\n | r | \n ; WS : [\t ] ;// Keywords VAR : var ;// Literals INTLIT : 0|[1-9][0-9]* ; DECLIT : 0|[1-9][0-9]* . [0-9] ;// Operators PLUS : ; MINUS : - ; ASTERISK : * ; DIVISION : / ; ASSIGN : ; LPAREN : ( ; RPAREN : ) ;// Identifiers ID : [_]*[a-z][A-Za-z0-9_]* ; 现在我们可以简单地运行./ gradlew generateGrammarSource并且将根据先前的定义为我们生成词法分析器。 测试词法分析器 测试始终很重要但是在构建语言时绝对至关重要如果支持您的语言的工具不正确这可能会影响您将为其构建的所有程序。 因此让我们开始测试词法分析器我们只需要验证词法分析器产生的标记序列就是我们所关注的。 package me.tomassetti.sandyimport me.tomassetti.langsandbox.SandyLexer import org.antlr.v4.runtime.ANTLRInputStream import java.io.* import java.util.* import org.junit.Test as test import kotlin.test.*class SandyLexerTest {fun lexerForCode(code: String) SandyLexer(ANTLRInputStream(StringReader(code)))fun lexerForResource(resourceName: String) SandyLexer(ANTLRInputStream(this.javaClass.getResourceAsStream(/${resourceName}.sandy)))fun tokens(lexer: SandyLexer): ListString {val tokens LinkedListString()do {val t lexer.nextToken()when (t.type) {-1 - tokens.add(EOF)else - if (t.type ! SandyLexer.WS) tokens.add(lexer.ruleNames[t.type - 1])}} while (t.type ! -1)return tokens}test fun parseVarDeclarationAssignedAnIntegerLiteral() {assertEquals(listOf(VAR, ID, ASSIGN, INTLIT, EOF),tokens(lexerForCode(var a 1)))}test fun parseVarDeclarationAssignedADecimalLiteral() {assertEquals(listOf(VAR, ID, ASSIGN, DECLIT, EOF),tokens(lexerForCode(var a 1.23)))}test fun parseVarDeclarationAssignedASum() {assertEquals(listOf(VAR, ID, ASSIGN, INTLIT, PLUS, INTLIT, EOF),tokens(lexerForCode(var a 1 2)))}test fun parseMathematicalExpression() {assertEquals(listOf(INTLIT, PLUS, ID, ASTERISK, INTLIT, DIVISION, INTLIT, MINUS, INTLIT, EOF),tokens(lexerForCode(1 a * 3 / 4 - 5)))}test fun parseMathematicalExpressionWithParenthesis() {assertEquals(listOf(INTLIT, PLUS, LPAREN, ID, ASTERISK, INTLIT, RPAREN, MINUS, DECLIT, EOF),tokens(lexerForCode(1 (a * 3) - 5.12)))} }结论和下一步 我们从第一步开始设置项目并构建词法分析器。 使这种语言在实践中可用之前我们还有很长的路要走但我们还是开始了。 接下来我们将使用相同的方法来处理解析器构建一些简单的东西以便我们可以通过命令行进行测试和编译。 翻译自: https://www.javacodegeeks.com/2016/07/getting-started-antlr-building-simple-expression-language.htmlantlr idea 入门
http://www.pierceye.com/news/934724/

相关文章:

  • 汉中网站建设服务网站宣传推广平台
  • 关于科技园区建设文章的网站软文兼职10元一篇
  • 免费隐私网站推广海宁自适应网站建设
  • ipad网站制作网络平台怎么建立网站吗
  • 午夜资源站诸暨北京有哪些网站制作公司
  • 无忧自助建站安卓手机建站
  • 网站建设怎设计榆林市城乡建设规划局网站
  • 网站建设相关资讯做网站 思源字体
  • 辽宁网站设计国家开发大学网站作业怎么做
  • 仿西部数码网站注册建筑设计师
  • 南昌企业网站设计建设制作怎么删除ghost wordpress
  • 如何建个人免费网站手机怎么做网站免费的
  • 目前做那个网站能致富怎么增加网站的权重
  • 无锡网站建设818gx中国机械加工网卸粮四通
  • 淘宝网网站建设出入南京最新通知今天
  • 做企业网站项目的心得做网站一定要后台嘛
  • 青峰集团响应式网站论坛网站怎么做跳转
  • 代网站建设制作微信公众号网站开发
  • 潍坊网站的公司电话网站关键字多少个
  • 网站开发确认书青岛做网站的公司哪个好
  • 权威的企业网站建设网站开发费用算无形资产吗
  • 网站安全在线检测网络制作软件
  • 潍坊网站设计制作威宁住房和城乡建设局网站
  • 哈尔滨企业建站网站开发推广文案怎么写
  • 建立电子商务网站目的想要开网店怎么开
  • iis怎么建设网站内容杭州做搜索引擎网站的公司
  • 兰州网站开发价格建设和住房保障部 网站
  • 机械设备网站建设效果好的徐州网站开发
  • 商丘网站建设专业现状桓台县网站建设
  • 一级a做爰片免费网站孕交视频教程wordpress用的什么前端