ANTLR(三)
スペース定義 スペース、tab記号および改行記号は、ANTLRが識別子のような語彙記号を区切るときに区切り記号として使用される.それ以外は無視されていますたとえば、「FirstName LastName」は、ANTLRに対して1つのマーカーではなく2つのマーカーであり、スペースであり、次に1つのマーカーである.
コメント
ANTLRはC言語スタイルのブロックコメントとC++スタイルの行コメントを受け入れます.文法クラスやルールでは、Javaスタイルのドキュメントコメントも受け入れられ、必要に応じて生成された出力ファイルに渡すことができます.たとえば
文字セット
文字定数はJavaのように決定されます.8進数エスケープ文字セット(e.g. '/377'),Unicode文字セット(e.g., '/uFF 00')と、Javaで認識できる一般的な文字エスケープ('/b','/r','/t','/n','/f','/','/').構文解析規則では、単一引用符は入力文字ストリームで一致する文字を表します.シンタックスアナライザでは、単一引用符がサポートされていない文字です.
ファイル終了フラグ EOF タグは構文解析規則で自動的に生成されます.
你可以在词法分析器规则的动作中检测EOF_CHAR符号:
当你将文件结束当一个字符来检测时,它实际上并不是一个字符,而是一个条件。
你可以在你的词法分析器语法中覆盖 CharScanner.uponEOF()函数:
文件结束条件是一个位比特(从2.7.1版本开始)。因为Terence 将-1当作一个字符而不是一个整型数。(-1 是 '/uFFFF'...晕!).
字符串
字符串常数一个由双引号括起来的一系列字符。在字符串中的字符可以是作为字符也同样合法的转义字符(八进制,Unicode等)。当前,ANTLR实际上不允许Unicode出现在字符串常量中(你不得不用转义符)。这是因为在anglr.g文件中设定charVocabulary选项为ascii.
在词法分析器规则中,字符串被解释成可以在输入流中匹配的一系列字符 (例如., "for" 等于 'f' 'o' 'r').
在语法分析器规则中,字符串代表一个个标记(tokens),并且每个独立的字符串被分派一个标记类型。然而,ANTLR不会创建一个词法分析器规则来匹配这些字符串。相反,ANTLR将这些字符串输入到一个于词法分析器关联的字符常量表中。ANTLR将针对字符常量表来产生代码检测每个标记中的文本,在手动关掉语法分析器对该标记的处理之前获得一个匹配时,会改变标记的类型。你也可以执行手动检测――自动代码生成可以通过词法分析器选项控制。
你可能想在你的动作中使用这些字符串常量的标记的类型值,例如在错误处理器的同步部分。对于只由字母字符组成的字符串常量来说,这个字符串常量的值将是一个形如LITERAL_xxx的常量值,这里xxx是这个标记的名字。例如,文字“return”将有一个LITERAL_return值与之关联。你也可以用标记节(tokens section)分派一个特定的标号给这个文字。
标记引用
以大写字符开头的标识符称为标记引用。接下来的字符可以是任何字符,数字或下划线。在语法分析器规则中一个标记引用将导致匹配特定的标记。在词法分析器中的标记引用将导致调用一个词法规则来匹配该标记的字符。换句话说,在词法分析器中的标记引用将对当作一个规则引用。
标记定义
在词法分析器中的标记定义由和语法规则中相同的定义。但是当做标记而不是语法规则。例如,
ルール参照
小文字で始まる識別子はANTLRの構文規則です.次の文字は、任意のアルファベット、数値、または下線です.文法規則は文法規則を参照できません.
动作
カッコ内の文字列は意味動作(ネストされている可能性があります).文字列と文字の括弧は、アクションセパレータではありません.
アクションパラメータ
カッコ内の文字列は、動作パラメータ(ネストされている可能性があります)です.文字列と文字の括弧は、アクションセパレータではありません.[]のパラメータは、生成された言語の構文で定義され、カンマで区切られます.
多くの人は私たちが普通のかっこでパラメータを囲むのが好きですが、カッコはEBNFで文法グループ記号(grammatical grouping symbols)を定義するのによく使われています.
アイコン 次の表は、ANTLRで使用される句読点とキーワードを集計しています.
アイコン
説明
(...)
サブルール
(...)*
閉饅頭ルール(ゼロと複数)
(...)+
正閉饅頭ルール(1つと複数)
(...)?
オプション(0個と1個)
{...}
セマンティックアクション
[...]
ルール・パラメータ
{...}?
意味述語
(...)=>
構文述語
|
オプション
..
レンジキャラクタ
~
非
.
ワイルドカード
=
に値を付ける
:
ラベル、 ルールの開始
;
ルールの終了
<.../>
要素オプション
class
構文クラス
extends
構文ベースクラスの指定
returns
戻りタイプの指定
options
options セクション
tokens
tokens セクション
header
header セクション
tokens
token セクションの定義