?? pascal.atg
字號(hào):
COMPILER Pascal
/* J & W Pascal - not Turbo Pascal */
/* This grammar is not LL(1) */
CHARACTERS
eol = CHR(13) .
letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
digit = "0123456789".
noQuote1 = ANY - "'" - eol .
IGNORE CHR(9) .. CHR(13)
IGNORE CASE
COMMENTS FROM "(*" TO "*)"
COMMENTS FROM "{" TO "}"
TOKENS
identifier = letter { letter | digit } .
integer = digit { digit } | digit { digit } CONTEXT ("..") .
real = digit { digit } "." digit { digit }
[ "E" ["+" | "-"] digit { digit } ]
| digit { digit } "E" ["+" | "-"] digit { digit } .
string = "'" { noQuote1 | "''" } "'" .
PRODUCTIONS
Pascal = "program" NewIdent [ ExternalFiles ] ";"
Block "." .
ExternalFiles = "(" NewIdentList ")" .
Block = DeclarationPart StatementPart .
DeclarationPart = LabelDeclarations ConstDefinitions
TypeDefinitions VarDeclarations
{ ProcDeclarations } .
/* -------------------------------------------------------------------- */
LabelDeclarations = [ "label" Labels ";" ] .
Labels = Label { "," Label } .
Label = UnsignedInt .
/* -------------------------------------------------------------------- */
ConstDefinitions = [ "const" ConstDef { ConstDef } ] .
ConstDef = NewIdent "=" Constant ";" .
Constant = [ "+" | "-" ] ( UnsignedNumber | ConstIdent ) | String .
UnsignedNumber = UnsignedInt | UnsignedReal .
ConstIdent = identifier .
/* -------------------------------------------------------------------- */
TypeDefinitions = [ "type" TypeDef { TypeDef } ] .
TypeDef = NewIdent "=" Type ";" .
Type = SimpleType | [ "packed" ] StructType | "^" TypeIdent .
SimpleType = TypeIdent | EnumerationType | SubrangeType .
TypeIdent = identifier .
EnumerationType = "(" NewIdentList ")" .
SubrangeType = Constant ".." Constant .
StructType = ArrayType | RecordType | SetType | FileType .
ArrayType = "array" "[" IndexList "]" "of" Type .
IndexList = SimpleType { "," SimpleType } .
RecordType = "record" FieldList "end" .
SetType = "set" "of" SimpleType .
FileType = "file" "of" Type .
FieldList = [ ( fixedPart [ ";" VariantPart ] | VariantPart ) [ ";" ] ] .
fixedPart = RecordSection { ";" RecordSection } .
RecordSection = NewIdentList ":" Type .
VariantPart = "case" VariantSelector "of" Variant { ";" Variant } .
VariantSelector = [ NewIdent ":" ] TypeIdent .
Variant = CaseLabelList ":" "(" FieldList ")" .
/* -------------------------------------------------------------------- */
VarDeclarations = [ "var" VarDecl { VarDecl } ] .
VarDecl = NewIdentList ":" Type ";" .
/* -------------------------------------------------------------------- */
ProcDeclarations = ( ProcHeading | FuncHeading ) ";" Body ";" .
ProcHeading = "procedure" NewIdent [ FormalParams ] .
FuncHeading = "function" NewIdent [ FormalParams ] ReturnType .
ReturnType = [ /* empty if forward referenced */ ":" TypeIdent ] .
Body = Block | "forward" .
FormalParams = "(" FormalSection { ";" FormalSection } ")" .
FormalSection = [ "var" ] ParamGroup | ProcHeading | FuncHeading .
ParamGroup = NewIdentList ":" ParamType .
ParamType = TypeIdent
| "array" "[" IndexSpecList "]" "of" ParamType
| "packed" "array" "[" IndexSpec "]" "of" TypeIdent .
IndexSpecList = IndexSpec { ";" IndexSpec } .
IndexSpec = NewIdent ".." NewIdent ":" TypeIdent .
/* -------------------------------------------------------------------- */
StatementPart = CompoundStatement .
CompoundStatement = "begin" StatementSequence "end" .
StatementSequence = Statement { ";" Statement } .
Statement = [ Label ":" ]
[ AssignmentOrCall
| CompoundStatement
| GotoStatement
| WhileStatement
| RepeatStatement
| IfStatement
| CaseStatement
| ForStatement
| WithStatement ] .
AssignmentOrCall = Designator ( ":=" Expression | [ ActualParams ] ) .
ActualParams = "(" ActualParameter { "," ActualParameter } ")" .
ActualParameter = Expression [ FieldWidth /* only in i/o */ ] .
FieldWidth = ":" IntegerExpression [ ":" IntegerExpression ] .
GotoStatement = "goto" Label .
WhileStatement = "while" BooleanExpression "do" Statement .
RepeatStatement = "repeat" StatementSequence "until" BooleanExpression .
IfStatement = "if" BooleanExpression "then" Statement
[ "else" Statement ] .
CaseStatement = "case" OrdinalExpression "of" CaseList "end" .
CaseList = OneCase { ";" OneCase } [ ";" ] .
OneCase = CaseLabelList ":" Statement .
CaseLabelList = CaseLabel { "," CaseLabel } .
CaseLabel = Constant .
ForStatement = "for" ControlVariable ":=" OrdinalExpression
( "to" | "downto" ) OrdinalExpression "do" Statement .
ControlVariable = identifier .
WithStatement = "with" RecVarList "do" Statement .
RecVarList = Designator { "," Designator } .
/* -------------------------------------------------------------------- */
IntegerExpression = Expression .
BooleanExpression = Expression .
OrdinalExpression = Expression .
Expression = SimpleExpression [ RelOp SimpleExpression ] .
RelOp = "=" | "<" | ">" | "<=" | ">=" | "<>" | "in" .
SimpleExpression = ( "+" Term | "-" Term | Term ) { AddOp Term } .
AddOp = "+" | "-" | "or" .
Term = Factor { MulOp Factor } .
MulOp = "*" | "/" | "div" | "mod" | "and" .
Factor = Designator [ ActualParams ]
| UnsignedLiteral
| SetConstructor
| "(" Expression ")"
| "not" Factor .
Designator = identifier { "." identifier | "[" ExpList "]" | "^" } .
ExpList = Expression { "," Expression } .
UnsignedLiteral = UnsignedNumber | "nil" | String .
SetConstructor = "[" Member { "," Member } "]" .
Member = Expression [ ".." Expression ] .
/* -------------------------------------------------------------------- */
NewIdentList = NewIdent { "," NewIdent } .
NewIdent = identifier .
UnsignedInt = integer .
UnsignedReal = real .
String = string .
END Pascal.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -