首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我应该为此使用解析器/词法器吗?

我应该为此使用解析器/词法器吗?
EN

Stack Overflow用户
提问于 2009-12-17 16:31:32
回答 5查看 283关注 0票数 0

我想知道像ANTLR这样的工具是否会被批准来解析这些规则,或者它是过火了,我应该创建我自己的解析器。

这是为了解析别人的格式,所以我不能改变它。这是为了好玩和练习,所以不要太烦恼。这些是用来描述语言中语音变化的规则。我会引用原作者的话

声音转换格式 希望任何语言学家都能熟悉规则的格式。例如,这里有一个声音变化: c/g/V_V 这个规则说要在元音之间改变c到g。(我们将在下面介绍如何推广这条规则。) 更广泛地说,一个合理的变化是这样的: x/y/z 其中x是要改变的东西,y是它要改变的东西,z是环境。 Z部件必须始终包含下划线_,表示更改的部分。就这样,就像在 gn/nh/_ 它告诉程序无条件地用nh替换gn。 字符#代表单词的开头或结尾。所以 u/o/_# 意思是用o代替u,但只在单词的末尾。 中间(y)部分可以是空白的,如 s//_# 这意味着当s结束一个单词时,它就被删除了。 变量 环境(z部分)可以包含变量,如上面的V。这些都是在文件顶部定义的。我用大写字母来做这个,虽然这不是一个要求。变量只能是一个字符长。您可以定义声明声音更改所需的任何变量。例如,你可以把S定义为任意的停止,或者定义为任何日冕的K,或者什么的。 所以变量的定义和规则 F=ie c/i/F_t 意思是c在前元音之后和a t之前改变为i。 您也可以在前两部分中使用变量。例如,假设您定义了 S=ptc Z=bdg S/Z/V_V 这意味着,在元音之间,停止ptc改变为它们的浊音对应物bdg。在这种用法中,变量必须对应1:1-p= b,t= d,等等。替换变量(这里Z)中的每个字符都给出了输入变量(这里S)中每个字符的转换值。确保两个变量的定义是相同的长度! 还可以将变量设置为固定值或删除。例如。 Z//V_V 删除元音之间的浊音停止。 规则顺序 规则适用于它们所列的顺序。所以,用歌剧这个词和规则 p/b/V_V e//C_rV 第一个规则发出p的声音,导致obera;第二个规则删除辅音和中间音r之间的e,从而导致obra。 -p命令行参数可以帮助调试规则,因为它会使输出准确地显示应用于每个单词的规则。 环境中的可选元素 环境中的一个或多个元素可以用括号标记为可选元素。例如。 u/ü/_C(C)F 当它后面跟着一个或两个辅音,然后是一个前元音时,就把u改为ü。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-17 16:51:25

虽然您的语言很简单,但是使用ANTLR有很多优点。

  1. 速度。生成的代码非常快。
  2. 简约。由于您使用的是较高级别的语言,所以小的语法更改成本更低、更复杂。
  3. 可扩展性由于您使用的是较高级别的语言,添加功能是一项成本较低的活动。

是的,你需要学习抗病毒药物疗法。如果您的语法有歧义,您将需要了解shift(减少冲突和减少冲突)。这可能是值得花的时间。

许多问题是词汇扫描或解析问题。了解如何创建词汇扫描器和解析器是一项有用的技能。

票数 2
EN

Stack Overflow用户

发布于 2009-12-19 02:29:55

如果您的问题仅仅是解析规则,那么您可能不需要解析器生成器。就像你说的,所有规则都是X/Y/Z格式,在任何语言中分裂它们都是非常容易的。

如果正如我所怀疑的那样,您正在创建一个工具来读取规则并将它们应用到文件中,那么问题就会复杂得多。

若要使用解析器生成器,假设您有一组固定的规则,则必须以解析器生成器所需的格式将它们转换为一组语法生成,并将它们提供给它。通过编译解析器生成器的输出,您将得到一个能够根据这些规则翻译文件的程序。考虑到您的规则似乎是上下文敏感的(c/g/V_V),我建议寻找提供GLR (Tomita解析器)或钉住 (解析表达式语法)的解析器生成器。

如果您的规则集不是固定的,并且您的程序必须与文件一起读取它们才能进行转换,那么您真正需要的是一个文本转换引擎。在这种情况下,您将把X/Y/Z规则转换成适当的格式,并将其与源文件一起提供给引擎。

假设您不想编写自己的引擎,您可以查看通用宏处理器(M4盖马,.)或者直接解释语言(珀尔Lua,.)来帮助你。

例如,在Gema中,可以将c/g/V_V转换为:

代码语言:javascript
运行
AI代码解释
复制
<vowel>c<vowel>=$1g$2
vowel:a=a;e=e;i=i;o=o;u=u;=@terminate

在Lua in:

代码语言:javascript
运行
AI代码解释
复制
function rule1(s)
  return (string.gsub(s,"([aeiou])c([aeiou])","%1g%2"))
end

最后,它实际上取决于您是否需要为给定的一组规则创建某种东西,或者您是否需要能够读取和解释任何一组规则。

当然,在任何情况下,您都必须解析您的规则才能以正确的格式转换它们,但是,正如我在一开始所说的,语法在我看来非常简单,不能证明使用解析器生成器是合理的。

票数 1
EN

Stack Overflow用户

发布于 2009-12-17 16:37:45

在我看来,使用解析工具太过分了,特别是如果您还不熟悉可以完成这项工作的工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1925557

复制
相关文章
oracle用户更改密码_修改system用户密码
前几天通过plsql登录数据库时,提示密码过期,需要修改密码,那就修改呗。改完过了会,再登录,发现用户被锁了。那就去解锁下吧。
全栈程序员站长
2022/09/19
2.9K0
oracle用户更改密码_修改system用户密码
oracle更改用户的密码
1、以system或者sys的身份登录。登录语句sqlplus system/psw@ora_name或者sqlplus sys/psw@ora_name as sysdba。
全栈程序员站长
2022/09/19
2.5K0
oracle数据库用户更改密码_oracle用户密码忘记了
1.WIN+R打开运行窗口,输入cmd进入命令行: 输入sqlplus ,输入用户名,输入口令(如果是超级管理员SYS的话需在口令之后加上as sysdba)进入sql命令行;
全栈程序员站长
2022/09/19
2.7K0
oracle数据库用户更改密码_oracle用户密码忘记了
mysql 如何修改用户密码_MySQL如何更改用户密码
2、正在更改密码的用户正在使用该应用程序,因为如果在不更改应用程序的连接字符串的情况下更改密码,则应用程序将无法连接到数据库服务器。
全栈程序员站长
2022/09/07
4.8K0
linux oracle修改密码_linux 更改用户密码
大家好,又见面了,我是你们的朋友全栈君。 Linux环境中修改Oracle用户密码
全栈程序员站长
2022/09/19
12.2K0
09-4 更改用户密码
五、更改用户密码 本章最后一个主题,将介绍用户如何为自己设置密码(如果拥有超级用户权限,那么也可以为其它用户设置密码)。 1.passwd-设置或更改密码 使用 passwd 命令可以设置或更改密码。 (1)语法格式 passwd [user] ''' 功能: 设置或更改密码. 参数: ① user : 可选参数,通过指定一个用户名作为 passwd 命令的参数来为其设置密码(前提是**具有超级用户权限**)。 (若不指定 user 参数,也就是直接输入passwd 命令,更改的是**
见贤思齊
2020/08/11
9970
09-4 更改用户密码
linux修改用户密码命令_linux更改用户密码的命令
使用的Linux版本是:ubuntu-18.10-live-server-amd64
全栈程序员站长
2022/10/04
14.6K0
linux修改用户密码命令_linux更改用户密码的命令
Ubuntu更改密码和用户名步骤
Ubuntu是一个Linux操作系统,修改密码和用户名是有危险的动作,请谨慎修改。
葆宁
2019/04/18
74.7K2
Ubuntu更改密码和用户名步骤
Ubuntu 中更改默认的 root 用户密码,以及怎样修改用户密码
如题,相信许多刚接触 Ubuntu 系统的新手大多会遇到这个问题,那么我们该如何解决这个问题呢?Ubuntu 在安装过程中并没有让我们设置 root 用户密码,但当我们需要获取 root 用户的权限时,就会让我们输入 root 用户的密码,如下图,
村雨遥
2022/06/15
6.7K0
Ubuntu 中更改默认的 root 用户密码,以及怎样修改用户密码
通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)
1、用户名和密码的存储位置存储帐号的文件:/etc/passwd存储密码的文件:/etc/shadow2、可以使用cat、more、head、tail以及vim等命令查看或者修改,如下图所示:比如要查找系统中admin普通用户的密码,则执行:cat/etc/shadow|grep"admin"3、注意:/etc/shadow文件中的密码不是明文密码.如上图所示,第1个“:”号后面的即为“口令”字段,存放的是加密后的用户口令字,长度为13个字符.如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合{./0-9A-Za-z}中的字符,则对应的用户不能登录.
全栈程序员站长
2022/06/24
88.2K0
通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)
mysql中更改密码的首选语句_MySQL如何更改用户密码?(代码实例)「建议收藏」
在MySQL中,可以使用3种不同的语句更改用户帐户密码:UPDATE statementSET PASSWORD statementALTER USER statement.
全栈程序员站长
2022/09/21
5.9K0
mysql中更改密码的首选语句_MySQL如何更改用户密码?(代码实例)「建议收藏」
域用户忘记密码,如何通过winpe重置密码
1、进入救援模式(winpe),导航到系统盘system32目录下,重命名osk.exe为osk_bak.exe,后续还需要改回来
Windows技术交流
2022/07/26
14.4K0
mysql8.0修改用户密码_sql数据库更改用户登录密码
示例:修改mysql数据库中的user表中的test用户的登录密码。 MySQL版本号:8.0.15
全栈程序员站长
2022/09/21
3.4K0
mysql8.0修改用户密码_sql数据库更改用户登录密码
linux中强制用户在下次登录时更改密码
如果你刚刚使用默认密码创建了一个用户帐户,你还可以使用此技巧强制该用户在第一次登录时更改其密码。 使用 passwd 命令 要强制用户更改用户的密码,首先必须是密码已过期,你可以使用 passwd command,用于通过指定-e或--expire开关以及用户名来更改用户的密码 # passwd --expire rumenz 接下来验证用户 rumenz 密码过期和老化信息 chage command # chage -l rumenz 运行后 passwd command 上面,你可以从输出中看到 c
入门笔记
2022/06/02
3.6K0
linux中强制用户在下次登录时更改密码
如果你刚刚使用默认密码创建了一个用户帐户,你还可以使用此技巧强制该用户在第一次登录时更改其密码。 使用 passwd 命令 要强制用户更改用户的密码,首先必须是密码已过期,你可以使用 passwd command,用于通过指定-e或--expire开关以及用户名来更改用户的密码 # passwd --expire rumenz 接下来验证用户 rumenz 密码过期和老化信息 chage command # chage -l rumenz 运行后 passwd command 上面,你可以从输出中看到 ch
玖柒的小窝
2021/10/21
2.9K0
linux命令行修改用户名_linux 更改用户密码
一、《Linux的chmod命令》。在 shell 中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所在用户组。在 Linux的C程序中,可以使用chown函数来改变文件所有者,及所在用户组。
全栈程序员站长
2022/09/30
5.7K0
confluence更改admin密码
在做confluence数据迁移之后,出现了使用admin账户无法登录,日志报错信息如下:
dogfei
2020/07/31
5.5K0
Mysql 5.7更改密码
如果MySQL数据库用户的密码设置过于简单,数据库在用户登录后会提示重置密码,并且不接受简单的密码。
用户5760343
2022/05/23
3.9K0
更改 MySql root 密码
回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe --skip-grant-tables &
onety码生
2018/11/21
12.9K1
13.1 设置更改root密码
设置更改root密码目录概要 /usr/local/mysql/bin/mysql -uroot 更改环境变量PATH,增加mysql绝对路径 mysqladmin -uroot password '123456' mysql -uroot -p123456 密码重置 vi /etc/my.cnf//增加skip-grant 重启mysql服务 /etc/init.d/mysqld restart mysql -uroot use mysql; update user set password=passwo
运维小白
2018/02/06
3K0

相似问题

在Java/Scala中复制CouchDB 1.2.0密码哈希函数

11

更改密码Bitnami CouchDB

13

通过api更改CouchDB1.2中的密码?

12

CouchDB::客户端用户/密码

17

通过JDBC更改用户密码

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档