TXL语法基础

TXL语法基础

1 解析阶段

Txl主要使用语法理论中的标准术语:token/终结符、非终结符、解析树
还有一些不标准的术语:模式、类型、变量、程序、修饰符

1.1 token

语法 说明 实例
[id] 标识符 a A xyz a_long_name
[number] 正数 3 3.4 (not -2.3)
[charlit] 字符串(单引号) ‘this’
[stringlit] 字符串(双引号) “that”
[comment] 注释 由Comments语句指定,使用命令行选项"-comment"
[space] 空白符、制表符
[newline] 换行符 NL(unix)、CR LF(windows)
[empty] 始终匹配且不消耗输入内容
[key] 关键字 有Keys语句指定
[any] 通用符号

1.2 修饰符

括在方括号中的任何 都可以通过修饰符进行修饰,如果要修改的项目是显式标识符或终结符,则必须使用前导单引号引用它。例如,[opt’;]表示可选分号,而[opt;]表示非法。

修饰符 说明 使用实例 实例说明 缩写
opt 当前类型是可选的 [opt elseClause] else子句可有可无 [X?]
repeat 匹配当前类型0个或多个序列 [repeat id] 0个或多个连续标识符 [X*]
repeat+ 匹配当前类型1个或多个序列 [repeat statement+] 1个或多个连续语句 [X+]
list 匹配","分割的序列(可能为空) [list formalParameter] 0个或多个参数 [X,]
list+ 匹配","分割的序列(不能为空) [list formalParameter+] 1个或多个参数 [X,+]
attr 暂时存储当前符号的某些属性 -
see 匹配前缀 [see X] 以X为前缀 [:X]
not 不匹配前缀 [not X] 不以X为前缀 [~X]
push 匹配当前与下一pop标记的两个非终结符 实例如下 [>X]
pop 与pop配对 实例如下 [<X]

实例1:记录id对应的类型,并在反解析阶段输出

---------
解析阶段:

define typeName
	'int | 'string
end define

define typed_id
	[id] [attr typeName]        % [attr] means that the [typeName] is an
                              % optional attribute
end define

---------
反解析阶段:

function inferTypeFrom Expn [expression]
	replace [typed_id]
		Id[id]
	deconstruct Expn
		% checks to see whether the expression is a
		% binary operation acting on two numbers
		First [number] Op [binary_operator] Second [number]
	by
		Id 'int
end function

实例2:仅解析其开始(push)和结束标记(pop)标识符匹配的元素

define matched_tag
	< [push id] > [repeat content] </ [pop id] > 
end define 

1.3 语句

1)Keys语句
实例:将program等标记为关键字,其中“end”为TXL自身关键字,前面需要添加转义字符"’"

keys
	program procedure function
	repeat until for while do 'end
end keys

2)Compounds语句
实例:将:=等多字符序列识别成1个token,其中“%”为TXL自身关键字,前面需要添加转义字符"’"

compounds
	:= <= >= -> <-> '%=
end compounds

3)Comments语句
实例:列出了输入语言的注释括号,每行一对。

comments
	//
	/* */
end comments

4)Tokens语句
实例:扩展token类别,将"0[Xx][\dABCDEFabcdef]+"正则式表示为hexnumber

tokens
	hexnumber  "0[Xx][\dABCDEFabcdef]+
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值