mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge branch 'rascal-linguist' of git://github.com/ahmadsalim/linguist into ahmadsalim-rascal-linguist
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -806,3 +806,7 @@ | ||||
| [submodule "vendor/grammars/language-gn"] | ||||
| 	path = vendor/grammars/language-gn | ||||
| 	url = https://github.com/devoncarew/language-gn | ||||
| [submodule "vendor/grammars/rascal-syntax-highlighting"] | ||||
| 	path = vendor/grammars/rascal-syntax-highlighting | ||||
| 	url = https://github.com/usethesource/rascal-syntax-highlighting | ||||
|  | ||||
|   | ||||
| @@ -540,6 +540,8 @@ vendor/grammars/python-django.tmbundle: | ||||
| vendor/grammars/r.tmbundle: | ||||
| - source.r | ||||
| - text.tex.latex.rd | ||||
| vendor/grammars/rascal-syntax-highlighting: | ||||
| - source.rascal | ||||
| vendor/grammars/ruby-slim.tmbundle: | ||||
| - text.slim | ||||
| vendor/grammars/ruby.tmbundle: | ||||
|   | ||||
| @@ -3598,6 +3598,14 @@ Ragel in Ruby Host: | ||||
|   tm_scope: none | ||||
|   ace_mode: text | ||||
|   language_id: 317 | ||||
| Rascal: | ||||
|   type: programming | ||||
|   color: "#fffaa0" | ||||
|   extensions: | ||||
|   - ".rsc" | ||||
|   tm_scope: source.rascal | ||||
|   ace_mode: text | ||||
|   language_id: 173616037 | ||||
| Raw token data: | ||||
|   type: data | ||||
|   search_term: raw | ||||
|   | ||||
							
								
								
									
										10
									
								
								samples/Rascal/Analyze.rsc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								samples/Rascal/Analyze.rsc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| module Analyze | ||||
|  | ||||
| import Syntax; | ||||
|  | ||||
| set[Id] unreachable(Machine m) { | ||||
|   r = { <q1,q2> | (State)`state <Id q1> <Trans* ts>` <- m.states,  | ||||
| 				  (Trans)`<Id _>: <Id q2>` <- ts }+; | ||||
|   qs = [ q.name | /State q := m ]; | ||||
|   return { q | q <- qs, q notin r[qs[0]] }; | ||||
| } | ||||
							
								
								
									
										18
									
								
								samples/Rascal/Compile.rsc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								samples/Rascal/Compile.rsc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| module Compile | ||||
|  | ||||
| import Syntax; | ||||
|  | ||||
| str compile(Machine m) = | ||||
|   "while (true) { | ||||
|   '  event = input.next(); | ||||
|   '  switch (current) {  | ||||
|   '    <for (q <- m.states) {> | ||||
|   '    case \"<q.name>\": | ||||
|   '      <for (t <- q.out) {> | ||||
|   '      if (event.equals(\"<t.event>\")) | ||||
|   '        current = \"<t.to>\"; | ||||
|   '      <}> | ||||
|   '      break; | ||||
|   '    <}> | ||||
|   '  } | ||||
|   '}";  | ||||
							
								
								
									
										887
									
								
								samples/Rascal/Rascal.rsc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										887
									
								
								samples/Rascal/Rascal.rsc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,887 @@ | ||||
|  @license{ | ||||
|   Copyright (c) 2009-2015 CWI | ||||
|   All rights reserved. This program and the accompanying materials | ||||
|   are made available under the terms of the Eclipse Public License v1.0 | ||||
|   which accompanies this distribution, and is available at | ||||
|   http://www.eclipse.org/legal/epl-v10.html | ||||
| } | ||||
| @contributor{Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI} | ||||
| @contributor{Tijs van der Storm - Tijs.van.der.Storm@cwi.nl} | ||||
| @contributor{Paul Klint - Paul.Klint@cwi.nl - CWI} | ||||
| @contributor{Arnold Lankamp - Arnold.Lankamp@cwi.nl} | ||||
| @contributor{Michael Steindorfer - Michael.Steindorfer@cwi.nl - CWI} | ||||
| @doc{The syntax definition of Rascal, excluding concrete syntax fragments} | ||||
| module lang::rascal::\syntax::Rascal | ||||
|  | ||||
| lexical BooleanLiteral | ||||
| 	= "true"  | ||||
| 	| "false" ; | ||||
|  | ||||
| syntax Literal | ||||
| 	= integer: IntegerLiteral integerLiteral  | ||||
| 	| regExp: RegExpLiteral regExpLiteral  | ||||
| 	| \real: RealLiteral realLiteral  | ||||
| 	| boolean: BooleanLiteral booleanLiteral  | ||||
| 	| string: StringLiteral stringLiteral  | ||||
| 	| dateTime: DateTimeLiteral dateTimeLiteral  | ||||
| 	| location: LocationLiteral locationLiteral | ||||
| 	| rational: RationalLiteral rationalLiteral | ||||
| 	; | ||||
|  | ||||
| syntax Expression = concrete: Concrete concrete; | ||||
| syntax Pattern    = concrete: Concrete concrete; | ||||
|  | ||||
| lexical Concrete  | ||||
|   = typed: "(" LAYOUTLIST l1 Sym symbol LAYOUTLIST l2 ")" LAYOUTLIST l3 "`" ConcretePart* parts "`"; | ||||
|  | ||||
| lexical ConcretePart | ||||
|   = @category="MetaSkipped" text   : ![`\<\>\\\n]+ !>> ![`\<\>\\\n] | ||||
|   | newline: "\n" [\ \t \u00A0 \u1680 \u2000-\u200A \u202F \u205F \u3000]* "\'" | ||||
|   | @category="MetaVariable" hole : ConcreteHole hole | ||||
|   | @category="MetaSkipped" lt: "\\\<" | ||||
|   | @category="MetaSkipped" gt: "\\\>" | ||||
|   | @category="MetaSkipped" bq: "\\`" | ||||
|   | @category="MetaSkipped" bs: "\\\\" | ||||
|   ; | ||||
|    | ||||
| syntax ConcreteHole  | ||||
|   = \one: "\<" Sym symbol Name name "\>" | ||||
|   ; | ||||
|    | ||||
| start syntax Module | ||||
| 	= \default: Header header Body body ; | ||||
|  | ||||
| syntax ModuleParameters | ||||
| 	= \default: "[" {TypeVar ","}+ parameters "]" ; | ||||
|  | ||||
| lexical DateAndTime | ||||
| 	= "$" DatePart "T" TimePartNoTZ !>> [+\-] "$" | ||||
| 	| "$" DatePart "T" TimePartNoTZ TimeZonePart "$"; | ||||
|  | ||||
| syntax Strategy | ||||
| 	= topDownBreak: "top-down-break"  | ||||
| 	| topDown: "top-down"  | ||||
| 	| bottomUp: "bottom-up"  | ||||
| 	| bottomUpBreak: "bottom-up-break"  | ||||
| 	| outermost: "outermost"  | ||||
| 	| innermost: "innermost" ; | ||||
|  | ||||
| lexical UnicodeEscape | ||||
| 	  = utf16: "\\" [u] [0-9 A-F a-f] [0-9 A-F a-f] [0-9 A-F a-f] [0-9 A-F a-f]  | ||||
|     | utf32: "\\" [U] (("0" [0-9 A-F a-f]) | "10") [0-9 A-F a-f] [0-9 A-F a-f] [0-9 A-F a-f] [0-9 A-F a-f] // 24 bits  | ||||
|     | ascii: "\\" [a] [0-7] [0-9A-Fa-f] | ||||
|     ; | ||||
|      | ||||
| syntax Variable | ||||
| 	= initialized: Name name "=" Expression initial  | ||||
| 	| unInitialized: Name name ; | ||||
|  | ||||
| lexical OctalIntegerLiteral | ||||
| 	= [0] [0-7]+ !>> [0-9 A-Z _ a-z] ; | ||||
|  | ||||
| syntax TypeArg | ||||
| 	= \default: Type type  | ||||
| 	| named: Type type Name name ; | ||||
|  | ||||
| syntax Renaming | ||||
| 	= \default: Name from "=\>" Name to ; | ||||
|  | ||||
| syntax Catch | ||||
| 	= \default: "catch" ":" Statement body  | ||||
| 	| binding: "catch" Pattern pattern ":" Statement body ; | ||||
|  | ||||
| lexical PathChars | ||||
| 	= URLChars [|] ; | ||||
|  | ||||
| syntax Signature | ||||
| 	= withThrows: FunctionModifiers modifiers Type type  Name name Parameters parameters "throws" {Type ","}+ exceptions  | ||||
| 	| noThrows: FunctionModifiers modifiers Type type  Name name Parameters parameters ; | ||||
|  | ||||
| syntax Sym | ||||
| // named non-terminals | ||||
| 	= nonterminal: Nonterminal nonterminal !>> "[" | ||||
| 	| parameter: "&" Nonterminal nonterminal  | ||||
| 	| parametrized: Nonterminal nonterminal >> "[" "[" {Sym ","}+ parameters "]" | ||||
| 	| \start: "start" "[" Nonterminal nonterminal "]" | ||||
| 	| labeled: Sym symbol NonterminalLabel label | ||||
| // literals  | ||||
| 	| characterClass: Class charClass  | ||||
| 	| literal: StringConstant string  | ||||
| 	| caseInsensitiveLiteral: CaseInsensitiveStringConstant cistring | ||||
| // regular expressions | ||||
| 	| iter: Sym symbol "+"  | ||||
| 	| iterStar: Sym symbol "*"  | ||||
| 	| iterSep: "{" Sym symbol Sym sep "}" "+"  | ||||
| 	| iterStarSep: "{" Sym symbol Sym sep "}" "*"  | ||||
| 	| optional: Sym symbol "?"  | ||||
| 	| alternative: "(" Sym first "|" {Sym "|"}+ alternatives ")" | ||||
| 	| sequence: "(" Sym first Sym+ sequence ")" | ||||
| 	// TODO: MinimalIter: Sym symbol IntegerConstant minimal "+" | ||||
| 	// TODO: MinimalIterSep: "{" Sym symbol Symbol sep "}" IntegerConstant minimal "+" | ||||
| 	// TODO | Permutation: "(" Sym first "~" {Sym "~"}+ participants ")" | ||||
| 	// TODO | Combination: "(" Sym first "#" {Sym "#"}+ elements ")" | ||||
| 	| empty: "(" ")" | ||||
| // conditionals | ||||
| 	| column: Sym symbol "@" IntegerLiteral column  | ||||
| 	| endOfLine: Sym symbol "$"  | ||||
| 	| startOfLine: "^" Sym symbol | ||||
| 	| except:   Sym symbol "!" NonterminalLabel label | ||||
| 	>   | ||||
| 	assoc (  | ||||
| 	  left  ( follow:     Sym symbol  "\>\>" Sym match | ||||
| 	        | notFollow:  Sym symbol "!\>\>" Sym match | ||||
| 	        ) | ||||
| 	  |  | ||||
| 	  right ( precede:    Sym match "\<\<" Sym symbol  | ||||
| 	        | notPrecede: Sym match "!\<\<" Sym symbol | ||||
| 	        ) | ||||
| 	) | ||||
| 	>  | ||||
| 	left unequal:  Sym symbol "\\" Sym match | ||||
| 	; | ||||
|  | ||||
| lexical TimePartNoTZ | ||||
| 	= [0-2] [0-9] [0-5] [0-9] [0-5] [0-9] ([, .] [0-9] ([0-9] [0-9]?)?)?  | ||||
| 	| [0-2] [0-9] ":" [0-5] [0-9] ":" [0-5] [0-9] ([, .] [0-9] ([0-9] [0-9]?)?)?  | ||||
| 	; | ||||
|  | ||||
| syntax Header | ||||
| 	= parameters: Tags tags "module" QualifiedName name ModuleParameters params Import* imports  | ||||
| 	| \default: Tags tags "module" QualifiedName name Import* imports ; | ||||
|  | ||||
| lexical Name | ||||
|     // Names are surrounded by non-alphabetical characters, i.e. we want longest match. | ||||
| 	=  ([A-Z a-z _] !<< [A-Z _ a-z] [0-9 A-Z _ a-z]* !>> [0-9 A-Z _ a-z]) \ RascalKeywords  | ||||
| 	| [\\] [A-Z _ a-z] [\- 0-9 A-Z _ a-z]* !>> [\- 0-9 A-Z _ a-z]  | ||||
| 	; | ||||
|  | ||||
| syntax SyntaxDefinition | ||||
| 	=  @Foldable \layout  : Visibility vis "layout"  Sym defined "=" Prod production ";"  | ||||
| 	|  @Foldable \lexical : "lexical" Sym defined "=" Prod production ";"  | ||||
| 	|  @Foldable \keyword : "keyword" Sym defined "=" Prod production ";" | ||||
| 	|  @Foldable language: Start start "syntax" Sym defined "=" Prod production ";" ; | ||||
|  | ||||
| syntax Kind | ||||
| 	= function: "function"  | ||||
| 	| variable: "variable"  | ||||
| 	| \all: "all"  | ||||
| 	| \anno: "anno"  | ||||
| 	| \data: "data"  | ||||
| 	| view: "view"  | ||||
| 	| \alias: "alias"  | ||||
| 	| \module: "module"  | ||||
| 	| \tag: "tag" ; | ||||
|  | ||||
| syntax ImportedModule | ||||
| 	= \default: QualifiedName name  | ||||
| 	| actualsRenaming: QualifiedName name ModuleActuals actuals Renamings renamings  | ||||
| 	| renamings: QualifiedName name Renamings renamings  | ||||
| 	| actuals: QualifiedName name ModuleActuals actuals  | ||||
| 	; | ||||
|  | ||||
| syntax Target | ||||
| 	= empty:  | ||||
| 	| labeled: Name name ; | ||||
|  | ||||
| syntax IntegerLiteral | ||||
| 	= /*prefer()*/ decimalIntegerLiteral: DecimalIntegerLiteral decimal  | ||||
| 	| /*prefer()*/ hexIntegerLiteral: HexIntegerLiteral hex  | ||||
| 	| /*prefer()*/ octalIntegerLiteral: OctalIntegerLiteral octal ; | ||||
|  | ||||
| syntax FunctionBody | ||||
| 	= \default: "{" Statement* statements "}" ; | ||||
|      | ||||
| syntax Expression | ||||
| 	= nonEmptyBlock  : "{" Statement+ statements "}"  | ||||
| 	| bracket \bracket: "(" Expression expression ")"  | ||||
| 	| closure        : Type type Parameters parameters "{" Statement+ statements "}"  | ||||
| 	| stepRange      : "[" Expression first "," Expression second ".." Expression last "]"  | ||||
| 	| voidClosure    : Parameters parameters "{" Statement* statements0 "}"  | ||||
| 	| \visit          : Label label Visit visit  | ||||
| 	| reducer        : "(" Expression init "|" Expression result "|" {Expression ","}+ generators ")"  | ||||
| 	| reifiedType    : "type" "(" Expression symbol "," Expression definitions ")"   | ||||
| 	| callOrTree     : Expression!transitiveClosure!transitiveReflexiveClosure!isDefined expression "(" {Expression ","}* arguments KeywordArguments[Expression] keywordArguments ")" | ||||
| 	| literal        : Literal literal  | ||||
| 	| \any            : "any" "(" {Expression ","}+ generators ")"  | ||||
| 	| \all            : "all" "(" {Expression ","}+ generators ")"  | ||||
| 	| comprehension  : Comprehension comprehension  | ||||
| 	| \set            : "{" {Expression ","}* elements0 "}"  | ||||
| 	| \list           : "[" {Expression ","}* elements0 "]" | ||||
| 	| reifyType      : "#" Type type !>> "[" !selector | ||||
| 	| range          : "[" Expression first ".." Expression last "]" | ||||
| 	| \tuple          : "\<" {Expression ","}+ elements "\>"  | ||||
| 	| \map            : "(" {Mapping[Expression] ","}* mappings ")"  | ||||
| 	| \it             : [A-Z a-z _] !<< "it" !>> [A-Z a-z _] | ||||
| 	| qualifiedName  : QualifiedName qualifiedName  | ||||
| 	| subscript    : Expression expression!transitiveClosure!transitiveReflexiveClosure!isDefined "[" {Expression ","}+ subscripts "]" | ||||
| 	| slice        : Expression expression!transitiveClosure!transitiveReflexiveClosure!isDefined "[" OptionalExpression optFirst ".." OptionalExpression optLast "]"  | ||||
|     | sliceStep    : Expression expression!transitiveClosure!transitiveReflexiveClosure!isDefined "[" OptionalExpression optFirst "," Expression second ".." OptionalExpression optLast "]"  | ||||
| 	| fieldAccess  : Expression expression "." Name field  | ||||
| 	| fieldUpdate  : Expression expression "[" Name key "=" Expression replacement "]"  | ||||
| 	| fieldProject : Expression expression!transitiveClosure!transitiveReflexiveClosure!isDefined "\<" {Field ","}+ fields "\>"  | ||||
| 	| setAnnotation: Expression expression "[" "@" Name name "=" Expression value "]"  | ||||
|     | getAnnotation: Expression expression >> "@" "@" Name name  | ||||
| 	| is           : Expression expression "is" Name name | ||||
| 	| has          : Expression expression "has" Name name | ||||
| 	| transitiveClosure: Expression argument "+" !>> "=" | ||||
|     | transitiveReflexiveClosure: Expression argument "*" !>> "="  | ||||
| 	> isDefined    : Expression argument "?"  | ||||
| 	> negation     : "!" Expression!match!noMatch argument  | ||||
| 	| negative     : "-" Expression argument  | ||||
| 	| non-assoc splice : "*" Expression argument | ||||
| 	| asType       : "[" Type type "]" Expression!match!noMatch argument | ||||
| 	> left composition: Expression lhs "o" Expression rhs  | ||||
| 	> left ( product: Expression lhs "*" () !>> "*" Expression!noMatch!match rhs   | ||||
| 		   | \join   : Expression lhs "join" Expression rhs  | ||||
| 	       | remainder: Expression lhs "%" Expression rhs | ||||
| 		   | division: Expression lhs "/" Expression rhs  | ||||
| 	     ) | ||||
| 	> left intersection: Expression lhs "&" !>> "&" Expression rhs  | ||||
| 	> left ( addition   : Expression lhs "+" Expression!noMatch!match rhs   | ||||
| 		   | subtraction: Expression!transitiveClosure!transitiveReflexiveClosure lhs "-" Expression rhs | ||||
| 		   | appendAfter: Expression lhs "\<\<" !>> "=" Expression rhs | ||||
| 		   | insertBefore: Expression lhs "\>\>" Expression rhs  | ||||
| 	       ) | ||||
| 	> left modulo: Expression lhs "mod" Expression rhs | ||||
| 	> non-assoc ( notIn: Expression lhs "notin" Expression rhs   | ||||
| 		        | \in: Expression lhs "in" Expression rhs  | ||||
| 	) | ||||
| 	> non-assoc ( greaterThanOrEq: Expression lhs "\>=" Expression rhs   | ||||
| 		        | lessThanOrEq   : Expression lhs "\<=" Expression rhs  | ||||
| 		        | lessThan       : Expression lhs "\<" !>> "-" Expression rhs  | ||||
| 		        | greaterThan    : Expression lhs "\>" Expression rhs  | ||||
| 	            ) | ||||
| 	> non-assoc ( equals         : Expression lhs "==" Expression rhs | ||||
| 	            | nonEquals      : Expression lhs "!=" Expression rhs  | ||||
| 	            ) | ||||
| 	> non-assoc ifDefinedOtherwise: Expression lhs "?" Expression rhs | ||||
| 	> non-assoc ( noMatch: Pattern pattern "!:=" Expression expression   | ||||
| 		        | match: Pattern pattern ":=" Expression expression  | ||||
| 		        | enumerator: Pattern pattern "\<-" Expression expression  | ||||
| 	            )  | ||||
| 	> non-assoc ( implication: Expression lhs "==\>" Expression rhs   | ||||
| 		        | equivalence: Expression lhs "\<==\>" Expression rhs  | ||||
| 	            ) | ||||
| 	> left and: Expression lhs "&&" Expression rhs  | ||||
| 	> left or: Expression lhs "||" Expression rhs  | ||||
| 	> right ifThenElse: Expression condition "?" Expression thenExp ":" Expression elseExp | ||||
| 	;  | ||||
|  | ||||
| syntax OptionalExpression  | ||||
|   = expression: Expression expression | ||||
|   | noExpression: () | ||||
|   ; | ||||
|      | ||||
| syntax UserType | ||||
| 	= name: QualifiedName name  | ||||
| 	| parametric: QualifiedName name >> "[" "[" {Type ","}+ parameters "]" ; | ||||
|  | ||||
| syntax Import | ||||
| 	= \extend: "extend" ImportedModule module ";"  | ||||
| 	| \default: "import" ImportedModule module ";" | ||||
| 	| \external: "import" QualifiedName name "=" LocationLiteral at ";" | ||||
| 	| \syntax: SyntaxDefinition syntax ; | ||||
|  | ||||
| syntax Body | ||||
| 	= toplevels: Toplevel* toplevels ; | ||||
|  | ||||
| lexical URLChars | ||||
| 	= ![\t-\n \r \  \< |]* ; | ||||
|  | ||||
| lexical TimeZonePart | ||||
| 	= [+ \-] [0-1] [0-9] ":" [0-5] [0-9]  | ||||
| 	| "Z"  | ||||
| 	| [+ \-] [0-1] [0-9]  | ||||
| 	| [+ \-] [0-1] [0-9] [0-5] [0-9]  | ||||
| 	; | ||||
|  | ||||
| syntax ProtocolPart | ||||
| 	= nonInterpolated: ProtocolChars protocolChars  | ||||
| 	| interpolated: PreProtocolChars pre Expression expression ProtocolTail tail ; | ||||
|  | ||||
| syntax StringTemplate | ||||
| 	= ifThen    : "if"    "(" {Expression ","}+ conditions ")" "{" Statement* preStats StringMiddle body Statement* postStats "}"  | ||||
| 	| ifThenElse: "if"    "(" {Expression ","}+ conditions ")" "{" Statement* preStatsThen StringMiddle thenString Statement* postStatsThen "}" "else" "{" Statement* preStatsElse StringMiddle elseString Statement* postStatsElse "}"  | ||||
| 	| \for       : "for"   "(" {Expression ","}+ generators ")" "{" Statement* preStats StringMiddle body Statement* postStats "}"  | ||||
| 	| doWhile   : "do"    "{" Statement* preStats StringMiddle body Statement* postStats "}" "while" "(" Expression condition ")"  | ||||
| 	| \while     : "while" "(" Expression condition ")" "{" Statement* preStats StringMiddle body Statement* postStats "}" ; | ||||
|  | ||||
| lexical PreStringChars | ||||
| 	= @category="Constant" [\"] StringCharacter* [\<] ; | ||||
|  | ||||
| lexical CaseInsensitiveStringConstant | ||||
| 	= @category="Constant" "\'" StringCharacter* chars "\'" ; | ||||
|  | ||||
| lexical Backslash | ||||
| 	= [\\] !>> [/ \< \> \\] ; | ||||
|  | ||||
| syntax Label | ||||
| 	= \default: Name name ":"  | ||||
| 	| empty: ; | ||||
|  | ||||
| lexical MidProtocolChars | ||||
| 	= "\>" URLChars "\<" ; | ||||
|  | ||||
| lexical NamedBackslash | ||||
| 	= [\\] !>> [\< \> \\] ; | ||||
|  | ||||
| syntax Field | ||||
| 	= index: IntegerLiteral fieldIndex  | ||||
| 	| name: Name fieldName ; | ||||
|  | ||||
| lexical JustDate | ||||
| 	= "$" DatePart "$"; | ||||
|  | ||||
| lexical PostPathChars | ||||
| 	=  "\>" URLChars "|" ; | ||||
|  | ||||
| syntax PathPart | ||||
| 	= nonInterpolated: PathChars pathChars  | ||||
| 	| interpolated: PrePathChars pre Expression expression PathTail tail ; | ||||
|  | ||||
| lexical DatePart | ||||
| 	= [0-9] [0-9] [0-9] [0-9] "-" [0-1] [0-9] "-" [0-3] [0-9]  | ||||
| 	| [0-9] [0-9] [0-9] [0-9] [0-1] [0-9] [0-3] [0-9] ; | ||||
|  | ||||
| syntax FunctionModifier | ||||
| 	= java: "java"  | ||||
| 	| \test: "test"  | ||||
| 	| \default: "default"; | ||||
|  | ||||
| syntax Assignment | ||||
| 	= ifDefined: "?="  | ||||
| 	| division: "/="  | ||||
| 	| product: "*="  | ||||
| 	| intersection: "&="  | ||||
| 	| subtraction: "-="  | ||||
| 	| \default: "="  | ||||
| 	| addition: "+="  | ||||
| 	| \append: "\<\<=" | ||||
| 	; | ||||
|  | ||||
| syntax Assignable | ||||
| 	= bracket \bracket   : "(" Assignable arg ")" | ||||
| 	| variable          : QualifiedName qualifiedName | ||||
|     | subscript         : Assignable receiver "[" Expression subscript "]"  | ||||
|     | slice             : Assignable receiver "[" OptionalExpression optFirst ".." OptionalExpression optLast "]"  | ||||
|     | sliceStep         : Assignable receiver "[" OptionalExpression optFirst "," Expression second ".." OptionalExpression optLast "]"      | ||||
| 	| fieldAccess       : Assignable receiver "." Name field  | ||||
| 	| ifDefinedOrDefault: Assignable receiver "?" Expression defaultExpression  | ||||
| 	| constructor       : Name name "(" {Assignable ","}+ arguments ")"   | ||||
| 	| \tuple             : "\<" {Assignable ","}+ elements "\>"  | ||||
| 	| annotation        : Assignable receiver "@" Name annotation  ; | ||||
|  | ||||
| lexical StringConstant | ||||
| 	= @category="Constant" "\"" StringCharacter* chars "\"" ; | ||||
|  | ||||
|  | ||||
|  | ||||
| syntax Assoc | ||||
| 	= associative: "assoc"  | ||||
| 	| left: "left"  | ||||
| 	| nonAssociative: "non-assoc"  | ||||
| 	| right: "right" ; | ||||
|  | ||||
| syntax Replacement | ||||
| 	= unconditional: Expression replacementExpression  | ||||
| 	| conditional: Expression replacementExpression "when" {Expression ","}+ conditions ; | ||||
|  | ||||
| syntax DataTarget | ||||
| 	= empty:  | ||||
| 	| labeled: Name label ":" ; | ||||
|  | ||||
| lexical StringCharacter | ||||
| 	= "\\" [\" \' \< \> \\ b f n r t]  | ||||
| 	| UnicodeEscape  | ||||
| 	| ![\" \' \< \> \\] | ||||
| 	| [\n][\ \t \u00A0 \u1680 \u2000-\u200A \u202F \u205F \u3000]* [\'] // margin  | ||||
| 	; | ||||
|  | ||||
| lexical JustTime | ||||
| 	= "$T" TimePartNoTZ !>> [+\-] "$" | ||||
| 	| "$T" TimePartNoTZ TimeZonePart "$" | ||||
| 	; | ||||
|  | ||||
| lexical MidStringChars | ||||
| 	= @category="Constant" [\>] StringCharacter* [\<] ; | ||||
|  | ||||
| lexical ProtocolChars | ||||
| 	= [|] URLChars "://" !>> [\t-\n \r \ \u00A0 \u1680 \u2000-\u200A \u202F \u205F \u3000]; | ||||
|  | ||||
| lexical RegExpModifier | ||||
| 	= [d i m s]* ; | ||||
|  | ||||
| syntax CommonKeywordParameters  | ||||
|   = absent: () | ||||
|   | present: "(" {KeywordFormal ","}+ keywordFormalList ")" | ||||
|   ; | ||||
|      | ||||
| syntax Parameters | ||||
| 	= \default: "(" Formals formals KeywordFormals keywordFormals ")"  | ||||
| 	| varArgs: "(" Formals formals "..." KeywordFormals keywordFormals ")" ; | ||||
|  | ||||
| lexical OptionalComma = \default: ","? ; | ||||
|  | ||||
| syntax KeywordFormals | ||||
|     = \default: OptionalComma optionalComma [,\ (\t\n] << {KeywordFormal ","}+ keywordFormalList | ||||
|     | none: () | ||||
|     ; | ||||
|      | ||||
| syntax KeywordFormal  | ||||
|     = \default: Type type Name name "=" Expression expression | ||||
|     ; | ||||
|      | ||||
| syntax KeywordArguments[&T] | ||||
|     = \default:  OptionalComma optionalComma [,\ (\t\n] << {KeywordArgument[&T] ","}+ keywordArgumentList | ||||
|     | none: () | ||||
|     ; | ||||
|      | ||||
| syntax KeywordArgument[&T] = \default: Name name "=" &T expression ; | ||||
|  | ||||
| lexical RegExp | ||||
| 	= ![/ \< \> \\]  | ||||
| 	| "\<" Name "\>"  | ||||
| 	| [\\] [/ \< \> \\]  | ||||
| 	| "\<" Name ":" NamedRegExp* "\>"  | ||||
| 	| Backslash  | ||||
| 	// | @category="MetaVariable" [\<]  Expression expression [\>] TODO: find out why this production existed  | ||||
| 	; | ||||
| 	 | ||||
|  | ||||
| layout LAYOUTLIST | ||||
| 	= LAYOUT* !>> [\u0009-\u000D \u0020 \u0085 \u00A0 \u1680 \u180E \u2000-\u200A \u2028 \u2029 \u202F \u205F \u3000] !>> "//" !>> "/*"; | ||||
|  | ||||
| syntax LocalVariableDeclaration | ||||
| 	= \default: Declarator declarator  | ||||
| 	| \dynamic: "dynamic" Declarator declarator ; | ||||
|  | ||||
| lexical RealLiteral | ||||
| 	= [0-9]+ [D F d f]  | ||||
| 	| [0-9]+ [E e] [+ \-]? [0-9]+ [D F d f]? | ||||
| 	| [0-9]+ "." !>> "." [0-9]* [D F d f]?   | ||||
| 	| [0-9]+ "." [0-9]* [E e] [+ \-]? [0-9]+ [D F d f]?  | ||||
| 	| [.] !<< "." [0-9]+ [D F d f]?  | ||||
| 	| [.] !<< "." [0-9]+ [E e] [+ \-]? [0-9]+ [D F d f]?  | ||||
| 	; | ||||
|  | ||||
| syntax Range | ||||
| 	= fromTo: Char start "-" Char end  | ||||
| 	| character: Char character ; | ||||
|  | ||||
| syntax LocationLiteral | ||||
| 	= \default: ProtocolPart protocolPart PathPart pathPart ; | ||||
|  | ||||
| syntax ShellCommand | ||||
| 	= setOption: "set" QualifiedName name Expression expression  | ||||
| 	| undeclare: "undeclare" QualifiedName name  | ||||
| 	| help: "help"  | ||||
| 	| edit: "edit" QualifiedName name  | ||||
| 	| unimport: "unimport" QualifiedName name  | ||||
| 	| listDeclarations: "declarations"  | ||||
| 	| quit: "quit"  | ||||
| 	| history: "history"  | ||||
| 	| \test: "test"  | ||||
| 	| listModules: "modules"  | ||||
| 	| clear: "clear"; | ||||
|  | ||||
| syntax StringMiddle | ||||
| 	= mid: MidStringChars mid  | ||||
| 	| template: MidStringChars mid StringTemplate template StringMiddle tail  | ||||
| 	| interpolated: MidStringChars mid Expression expression StringMiddle tail ; | ||||
|  | ||||
| syntax QualifiedName | ||||
| 	= \default: {Name "::"}+ names !>> "::" ; | ||||
|  | ||||
| lexical RationalLiteral | ||||
|    = [0-9][0-9]* [r] | ||||
|    | [1-9][0-9]* [r] [0-9][0-9]* !>> [0-9 A-Z _ a-z] | ||||
|    ; | ||||
|  | ||||
| lexical DecimalIntegerLiteral | ||||
| 	= "0" !>> [0-9 A-Z _ a-z]  | ||||
| 	| [1-9] [0-9]* !>> [0-9 A-Z _ a-z] ; | ||||
|  | ||||
| syntax DataTypeSelector | ||||
| 	= selector: QualifiedName sort "." Name production ; | ||||
|  | ||||
| syntax StringTail | ||||
| 	= midInterpolated: MidStringChars mid Expression expression StringTail tail  | ||||
| 	| post: PostStringChars post  | ||||
| 	| midTemplate: MidStringChars mid StringTemplate template StringTail tail ; | ||||
|  | ||||
| syntax PatternWithAction | ||||
| 	= replacing: Pattern pattern "=\>" Replacement replacement  | ||||
| 	| arbitrary: Pattern pattern ":" Statement statement ; | ||||
|  | ||||
| lexical LAYOUT | ||||
| 	= Comment  | ||||
| 	// all the white space chars defined in Unicode 6.0  | ||||
| 	| [\u0009-\u000D \u0020 \u0085 \u00A0 \u1680 \u180E \u2000-\u200A \u2028 \u2029 \u202F \u205F \u3000]  | ||||
| 	; | ||||
|  | ||||
| syntax Visit | ||||
| 	= givenStrategy: Strategy strategy "visit" "(" Expression subject ")" "{" Case+ cases "}"  | ||||
| 	| defaultStrategy: "visit" "(" Expression subject ")" "{" Case+ cases "}" ; | ||||
|  | ||||
| start syntax Commands | ||||
| 	= \commandlist: EvalCommand+ commands | ||||
| 	; | ||||
|  | ||||
| start syntax EvalCommand | ||||
|   = declaration: Declaration declaration   | ||||
|   | statement: Statement!variableDeclaration!functionDeclaration!visit statement  | ||||
|   | \import: Import imported | ||||
|   | output: Output | ||||
|   ; | ||||
|   | ||||
| lexical Output    | ||||
|   = @category="Result" resultOutput: "⇨" ![\n\r]* [\n]  | ||||
|   | @category="StdOut" stdoutOutput: ^ "≫" ![\n\r]* [\n] | ||||
|   | @category="StdErr" stderrOutput: ^ "⚠" ![\n\r]* [\n] | ||||
|   ; | ||||
|    | ||||
| start syntax Command | ||||
| 	= expression: Expression!nonEmptyBlock expression  | ||||
| 	| declaration: Declaration declaration  | ||||
| 	| shell: ":" ShellCommand command  | ||||
| 	| statement: Statement!variableDeclaration!functionDeclaration!visit statement  | ||||
| 	| \import: Import imported ; | ||||
|  | ||||
| lexical TagString | ||||
| 	= "\\" !<< "{" ( ![{}] | ("\\" [{}]) | TagString)* contents "\\" !<< "}"; | ||||
|  | ||||
| syntax ProtocolTail | ||||
| 	= mid: MidProtocolChars mid Expression expression ProtocolTail tail  | ||||
| 	| post: PostProtocolChars post ; | ||||
|  | ||||
| lexical Nonterminal | ||||
| 	= ([A-Z] !<< [A-Z] [0-9 A-Z _ a-z]* !>> [0-9 A-Z _ a-z]) \ RascalKeywords; | ||||
|  | ||||
| syntax PathTail | ||||
| 	= mid: MidPathChars mid Expression expression PathTail tail  | ||||
| 	| post: PostPathChars post ; | ||||
|  | ||||
| syntax Visibility | ||||
| 	= \private: "private"  | ||||
| 	| \default:  | ||||
| 	| \public: "public" ; | ||||
|  | ||||
| syntax StringLiteral | ||||
| 	= template: PreStringChars pre StringTemplate template StringTail tail  | ||||
| 	| interpolated: PreStringChars pre Expression expression StringTail tail  | ||||
| 	| nonInterpolated: StringConstant constant ; | ||||
|  | ||||
| lexical Comment | ||||
| 	= @category="Comment" "/*" (![*] | [*] !>> [/])* "*/"  | ||||
| 	| @category="Comment" "//" ![\n]* !>> [\ \t\r \u00A0 \u1680 \u2000-\u200A \u202F \u205F \u3000] $ // the restriction helps with parsing speed | ||||
| 	; | ||||
| 	 | ||||
|  | ||||
| syntax Renamings | ||||
| 	= \default: "renaming" {Renaming ","}+ renamings ; | ||||
|  | ||||
| syntax Tags | ||||
| 	= \default: Tag* tags ; | ||||
|  | ||||
| syntax Formals | ||||
| 	= \default: {Pattern ","}* formals ; | ||||
|  | ||||
| lexical PostProtocolChars | ||||
| 	= "\>" URLChars "://" ; | ||||
|  | ||||
| syntax Start | ||||
| 	= absent:  | ||||
| 	| present: "start" ; | ||||
|  | ||||
| syntax Statement | ||||
| 	= @breakable \assert: "assert" Expression expression ";"  | ||||
| 	| @breakable assertWithMessage: "assert" Expression expression ":" Expression message ";"  | ||||
| 	| @breakable expression: Expression!visit!nonEmptyBlock expression ";"  | ||||
| 	| @breakable \visit: Label label Visit visit  | ||||
| 	| @breakable \while: Label label "while" "(" {Expression ","}+ conditions ")" Statement!variableDeclaration!functionDeclaration body  | ||||
| 	| @breakable doWhile: Label label "do" Statement body "while" "(" Expression condition ")" ";"  | ||||
| 	| @breakable @breakable{generators} \for: Label label "for" "(" {Expression ","}+ generators ")" Statement body  | ||||
| 	| @breakable ifThen: Label label "if" "(" {Expression ","}+ conditions ")" Statement!variableDeclaration!functionDeclaration thenStatement () !>> "else"  | ||||
| 	| @breakable ifThenElse: Label label "if" "(" {Expression ","}+ conditions ")" Statement thenStatement "else" Statement!variableDeclaration!functionDeclaration elseStatement  | ||||
| 	| @breakable \switch: Label label "switch" "(" Expression expression ")" "{" Case+ cases "}"  | ||||
| 	| @breakable \fail: "fail" Target target ";"  | ||||
| 	| @breakable \break: "break" Target target ";"  | ||||
| 	| @breakable \continue: "continue" Target target ";"  | ||||
|     | @breakable \filter: "filter" ";" | ||||
| 	| @breakable \solve: "solve" "(" {QualifiedName ","}+ variables Bound bound ")" Statement!variableDeclaration!functionDeclaration body  | ||||
| 	| @breakable non-assoc \try: "try" Statement body Catch+ handlers  | ||||
| 	| @breakable tryFinally: "try" Statement body Catch+ handlers "finally" Statement!variableDeclaration!functionDeclaration finallyBody  | ||||
| 	| nonEmptyBlock: Label label "{" Statement+ statements "}"  | ||||
| 	| emptyStatement: ";"  | ||||
| 	| @breakable globalDirective: "global" Type type {QualifiedName ","}+ names ";"  | ||||
| 	| @breakable assignment: Assignable assignable Assignment operator Statement!functionDeclaration!variableDeclaration statement | ||||
| 	| non-assoc  (  | ||||
| 		          @breakable \return    : "return" Statement!functionDeclaration!variableDeclaration statement   | ||||
| 		        | @breakable \throw     : "throw" Statement!functionDeclaration!variableDeclaration statement  | ||||
| 		        | @breakable \insert    : "insert" DataTarget dataTarget Statement!functionDeclaration!variableDeclaration statement  | ||||
| 		        | @breakable \append    : "append" DataTarget dataTarget Statement!functionDeclaration!variableDeclaration statement  | ||||
| 	            ) | ||||
|     | @breakable functionDeclaration: FunctionDeclaration functionDeclaration  | ||||
| 	| @breakable variableDeclaration: LocalVariableDeclaration declaration ";" | ||||
| 	;  | ||||
| 	 | ||||
|      | ||||
| syntax StructuredType | ||||
| 	= \default: BasicType basicType "[" {TypeArg ","}+ arguments "]" ; | ||||
|  | ||||
| lexical NonterminalLabel | ||||
| 	= [a-z] [0-9 A-Z _ a-z]* !>> [0-9 A-Z _ a-z] ; | ||||
|  | ||||
| syntax FunctionType | ||||
| 	= typeArguments: Type type "(" {TypeArg ","}* arguments ")" ; | ||||
|  | ||||
| syntax Case | ||||
| 	= @Foldable patternWithAction: "case" PatternWithAction patternWithAction  | ||||
| 	| @Foldable \default: "default" ":" Statement statement ; | ||||
|  | ||||
| syntax Declarator | ||||
| 	= \default: Type type {Variable ","}+ variables ; | ||||
|  | ||||
| syntax Bound | ||||
| 	= \default: ";" Expression expression  | ||||
| 	| empty: ; | ||||
|  | ||||
| keyword RascalKeywords | ||||
| 	= "o" | ||||
| 	| "syntax" | ||||
| 	| "keyword" | ||||
| 	| "lexical" | ||||
| 	| "int" | ||||
| 	| "break" | ||||
| 	| "continue" | ||||
| 	| "rat"  | ||||
| 	| "true"  | ||||
| 	| "bag"  | ||||
| 	| "num"  | ||||
| 	| "node"  | ||||
| 	| "finally"  | ||||
| 	| "private"  | ||||
| 	| "real"  | ||||
| 	| "list"  | ||||
| 	| "fail"  | ||||
| 	| "filter"  | ||||
| 	| "if"  | ||||
| 	| "tag"  | ||||
| 	| BasicType | ||||
| 	| "extend"  | ||||
| 	| "append"  | ||||
| 	| "rel"  | ||||
| 	| "lrel" | ||||
| 	| "void"  | ||||
| 	| "non-assoc"  | ||||
| 	| "assoc"  | ||||
| 	| "test"  | ||||
| 	| "anno"  | ||||
| 	| "layout"  | ||||
| 	| "data"  | ||||
| 	| "join"  | ||||
| 	| "it"  | ||||
| 	| "bracket"  | ||||
| 	| "in"  | ||||
| 	| "import"  | ||||
| 	| "false"  | ||||
| 	| "all"  | ||||
| 	| "dynamic"  | ||||
| 	| "solve"  | ||||
| 	| "type"  | ||||
| 	| "try"  | ||||
| 	| "catch"  | ||||
| 	| "notin"  | ||||
| 	| "else"  | ||||
| 	| "insert"  | ||||
| 	| "switch"  | ||||
| 	| "return"  | ||||
| 	| "case"  | ||||
| 	| "while"  | ||||
| 	| "str"  | ||||
| 	| "throws"  | ||||
| 	| "visit"  | ||||
| 	| "tuple"  | ||||
| 	| "for"  | ||||
| 	| "assert"  | ||||
| 	| "loc"  | ||||
| 	| "default"  | ||||
| 	| "map"  | ||||
| 	| "alias"  | ||||
| 	| "any"  | ||||
| 	| "module"  | ||||
| 	| "mod" | ||||
| 	| "bool"  | ||||
| 	| "public"  | ||||
| 	| "one"  | ||||
| 	| "throw"  | ||||
| 	| "set"  | ||||
| 	| "start" | ||||
| 	| "datetime"  | ||||
| 	| "value"  | ||||
| 	; | ||||
|  | ||||
| syntax Type | ||||
| 	= bracket \bracket: "(" Type type ")"  | ||||
| 	| user: UserType user | ||||
| 	| function: FunctionType function  | ||||
| 	| structured: StructuredType structured  | ||||
| 	| basic: BasicType basic  | ||||
| 	| selector: DataTypeSelector selector  | ||||
| 	| variable: TypeVar typeVar  | ||||
| 	| symbol: Sym!nonterminal!labeled!parametrized!parameter symbol | ||||
| 	; | ||||
|  | ||||
| syntax Declaration | ||||
| 	= variable    : Tags tags Visibility visibility Type type {Variable ","}+ variables ";"  | ||||
| 	| annotation  : Tags tags Visibility visibility "anno" Type annoType Type onType "@" Name name ";"  | ||||
| 	| \alias       : Tags tags Visibility visibility "alias" UserType user "=" Type base ";"  | ||||
| 	| \tag         : Tags tags Visibility visibility "tag" Kind kind Name name "on" {Type ","}+ types ";"  | ||||
| 	| dataAbstract: Tags tags Visibility visibility "data" UserType user CommonKeywordParameters commonKeywordParameters ";"  | ||||
| 	| @Foldable \data : Tags tags Visibility visibility "data" UserType user CommonKeywordParameters commonKeywordParameters"=" {Variant "|"}+ variants ";" | ||||
| 	| function       : FunctionDeclaration functionDeclaration  | ||||
| 	; | ||||
|  | ||||
| syntax Class | ||||
| 	= simpleCharclass: "[" Range* ranges "]"  | ||||
| 	| complement: "!" Class charClass  | ||||
| 	> left difference: Class lhs "-" Class rhs  | ||||
| 	> left intersection: Class lhs "&&" Class rhs  | ||||
| 	> left union: Class lhs "||" Class rhs  | ||||
| 	| bracket \bracket: "(" Class charclass ")" ; | ||||
|  | ||||
| lexical RegExpLiteral | ||||
| 	= "/" RegExp* "/" RegExpModifier ; | ||||
|  | ||||
| syntax FunctionModifiers | ||||
| 	= \modifierlist: FunctionModifier* modifiers ; | ||||
|  | ||||
| syntax Comprehension | ||||
| 	= @breakable{results,generators} \set: "{" {Expression ","}+ results "|" {Expression ","}+ generators "}"  | ||||
| 	| @breakable{from,to,generators} \map: "(" Expression from ":" Expression to "|" {Expression ","}+ generators ")"  | ||||
| 	| @breakable{results,generators} \list: "[" {Expression ","}+ results "|" {Expression ","}+ generators "]" ; | ||||
|  | ||||
| syntax Variant | ||||
| 	= nAryConstructor: Name name "(" {TypeArg ","}* arguments  KeywordFormals keywordArguments ")" ; | ||||
|  | ||||
| syntax FunctionDeclaration | ||||
| 	= abstract: Tags tags Visibility visibility Signature signature ";"  | ||||
| 	| @Foldable @breakable{expression} expression: Tags tags Visibility visibility Signature signature "=" Expression expression ";" | ||||
| 	| @Foldable @breakable{expression,conditions} conditional: Tags tags Visibility visibility Signature signature "=" Expression expression "when" {Expression ","}+ conditions ";" | ||||
| 	| @Foldable \default: Tags tags Visibility visibility Signature signature FunctionBody body ; | ||||
|  | ||||
| lexical PreProtocolChars | ||||
| 	= "|" URLChars "\<" ; | ||||
|  | ||||
| lexical NamedRegExp | ||||
| 	= "\<" Name "\>"  | ||||
| 	| [\\] [/ \< \> \\]  | ||||
| 	| NamedBackslash  | ||||
| 	| ![/ \< \> \\] ; | ||||
|  | ||||
| syntax ProdModifier | ||||
| 	= associativity: Assoc associativity  | ||||
| 	| \bracket: "bracket"  | ||||
| 	| \tag: Tag tag; | ||||
|  | ||||
| syntax Toplevel | ||||
| 	= givenVisibility: Declaration declaration ; | ||||
|  | ||||
| lexical PostStringChars | ||||
| 	= @category="Constant" [\>] StringCharacter* [\"] ; | ||||
|  | ||||
| lexical HexIntegerLiteral | ||||
| 	= [0] [X x] [0-9 A-F a-f]+ !>> [0-9 A-Z _ a-z] ; | ||||
|  | ||||
| syntax TypeVar | ||||
| 	= free: "&" Name name  | ||||
| 	| bounded: "&" Name name "\<:" Type bound ; | ||||
|  | ||||
|  | ||||
|  | ||||
| syntax BasicType | ||||
| 	= \value: "value"  | ||||
| 	| \loc: "loc"  | ||||
| 	| \node: "node"  | ||||
| 	| \num: "num"  | ||||
| 	| \type: "type"  | ||||
| 	| \bag: "bag"  | ||||
| 	| \int: "int" | ||||
| 	| rational: "rat"  | ||||
| 	| relation: "rel"  | ||||
| 	| listRelation: "lrel" | ||||
| 	| \real: "real"  | ||||
| 	| \tuple: "tuple"  | ||||
| 	| string: "str"  | ||||
| 	| \bool: "bool"  | ||||
| 	| \void: "void"  | ||||
| 	| dateTime: "datetime"  | ||||
| 	| \set: "set"  | ||||
| 	| \map: "map"  | ||||
| 	| \list: "list"  | ||||
| 	; | ||||
|  | ||||
| lexical Char | ||||
| 	= @category="Constant" "\\" [\  \" \' \- \< \> \[ \\ \] b f n r t]  | ||||
| 	| @category="Constant" ![\  \" \' \- \< \> \[ \\ \]]  | ||||
| 	| @category="Constant" UnicodeEscape  | ||||
|     ;  | ||||
|      | ||||
| syntax Prod | ||||
| 	= reference: ":" Name referenced | ||||
| 	| labeled: ProdModifier* modifiers Name name ":" Sym* syms  | ||||
| 	| others: "..."  | ||||
| 	| unlabeled: ProdModifier* modifiers Sym* syms | ||||
| 	| @Foldable associativityGroup: Assoc associativity "(" Prod group ")"  | ||||
| 	// | TODO add bracket rule for easy readability | ||||
| 	> left \all   : Prod lhs "|" Prod rhs  | ||||
| 	> left first : Prod lhs "\>" !>> "\>" Prod rhs | ||||
| 	; | ||||
|  | ||||
| syntax DateTimeLiteral | ||||
| 	= /*prefer()*/ dateLiteral: JustDate date  | ||||
| 	| /*prefer()*/ timeLiteral: JustTime time  | ||||
| 	| /*prefer()*/ dateAndTimeLiteral: DateAndTime dateAndTime ; | ||||
|  | ||||
| lexical PrePathChars | ||||
| 	= URLChars "\<" ; | ||||
|  | ||||
| syntax Mapping[&T] | ||||
| 	= \default: &T!ifDefinedOtherwise from ":" &T to  | ||||
| 	; | ||||
|  | ||||
| lexical MidPathChars | ||||
| 	= "\>" URLChars "\<" ; | ||||
|  | ||||
| /* | ||||
|   Note that Pattern must closely follow the definitions of Expression because eventually | ||||
|   these two non-terminals will be fused just before AST generation. | ||||
| */ | ||||
| syntax Pattern | ||||
| 	= \set                 : "{" {Pattern ","}* elements0 "}"  | ||||
| 	| \list                : "[" {Pattern ","}* elements0 "]"  | ||||
| 	| qualifiedName       : QualifiedName qualifiedName  | ||||
| 	| multiVariable       : QualifiedName qualifiedName "*" | ||||
| 	| splice              : "*" Pattern argument | ||||
| 	| splicePlus          : "+" Pattern argument  | ||||
| 	| negative            : "-" Pattern argument | ||||
| 	| literal             : Literal literal  | ||||
| 	| \tuple               : "\<" {Pattern ","}+ elements "\>"  | ||||
| 	| typedVariable       : Type type Name name  | ||||
| 	| \map                 : "(" {Mapping[Pattern] ","}* mappings ")"  | ||||
| 	| reifiedType         : "type" "(" Pattern symbol "," Pattern definitions ")"  | ||||
| 	| callOrTree          : Pattern expression "(" {Pattern ","}* arguments KeywordArguments[Pattern] keywordArguments ")"  | ||||
| 	> variableBecomes     : Name name ":" Pattern pattern | ||||
| 	| asType              : "[" Type type "]" Pattern argument  | ||||
| 	| descendant          : "/" Pattern pattern  | ||||
| 	| anti                : "!" Pattern pattern  | ||||
| 	| typedVariableBecomes: Type type Name name ":" Pattern pattern  | ||||
|     ; | ||||
|      | ||||
| syntax Tag | ||||
| 	= @Folded @category="Comment" \default   : "@" Name name TagString contents  | ||||
| 	| @Folded @category="Comment" empty     : "@" Name name  | ||||
| 	| @Folded @category="Comment" expression: "@" Name name "=" Expression expression !>> "@"; | ||||
|  | ||||
| syntax ModuleActuals | ||||
| 	= \default: "[" {Type ","}+ types "]" ; | ||||
							
								
								
									
										8
									
								
								samples/Rascal/Syntax.rsc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								samples/Rascal/Syntax.rsc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| module Syntax | ||||
|  | ||||
| extend lang::std::Layout; | ||||
| extend lang::std::Id; | ||||
|  | ||||
| start syntax Machine = machine: State+ states; | ||||
| syntax State = @Foldable state: "state" Id name Trans* out; | ||||
| syntax Trans = trans: Id event ":" Id to; | ||||
							
								
								
									
										1
									
								
								vendor/grammars/rascal-syntax-highlighting
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/grammars/rascal-syntax-highlighting
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/grammars/rascal-syntax-highlighting added at 13f2e4040c
									
								
							
							
								
								
									
										30
									
								
								vendor/licenses/grammar/rascal-syntax-highlighting.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/licenses/grammar/rascal-syntax-highlighting.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| --- | ||||
| type: grammar | ||||
| name: rascal-syntax-highlighting | ||||
| license: bsd-2-clause | ||||
| --- | ||||
| BSD 2-Clause License | ||||
|  | ||||
| Copyright (c) 2016, Ahmad Salim Al-Sibahi | ||||
| All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
|  | ||||
| * Redistributions of source code must retain the above copyright notice, this | ||||
|   list of conditions and the following disclaimer. | ||||
|  | ||||
| * Redistributions in binary form must reproduce the above copyright notice, | ||||
|   this list of conditions and the following disclaimer in the documentation | ||||
|   and/or other materials provided with the distribution. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||||
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||||
| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||||
| OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
		Reference in New Issue
	
	Block a user